From 07238fab1f33e58e88edb9bddf98a46c90ed7b72 Mon Sep 17 00:00:00 2001 From: "Adam D. Ruppe" Date: Wed, 15 Feb 2012 13:54:30 -0500 Subject: [PATCH] new opapply based iterator for queries --- database.d | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/database.d b/database.d index 032594a..273a247 100644 --- a/database.d +++ b/database.d @@ -48,6 +48,31 @@ interface Database { } import std.stdio; +struct Query { + ResultSet result; + static Query opCall(T...)(Database db, string sql, T t) { + Query q; + q.result = db.query(sql, t); + return q; + } + + int opApply(T)(T dg) if(is(T == delegate)) { + import std.traits; + foreach(row; result) { + ParameterTypeTuple!dg tuple; + + foreach(i, item; tuple) { + tuple[i] = to!(typeof(item))(row[i]); + } + + if(auto result = dg(tuple)) + return result; + } + + return 0; + } +} + struct Row { package string[] row; package ResultSet resultSet; @@ -298,7 +323,7 @@ int updateOrInsert(Database db, string table, string[string] values, string wher -string fixupSqlForDataObjectUse(string sql) { +string fixupSqlForDataObjectUse(string sql, string[string] keyMapping = null) { string[] tableNames; @@ -339,7 +364,10 @@ string fixupSqlForDataObjectUse(string sql) { string sqlToAdd; foreach(tbl; tableNames) { if(tbl.length) { - sqlToAdd ~= ", " ~ tbl ~ ".id" ~ " AS " ~ "id_from_" ~ tbl; + string keyName = "id"; + if(tbl in keyMapping) + keyName = keyMapping[tbl]; + sqlToAdd ~= ", " ~ tbl ~ "." ~ keyName ~ " AS " ~ "id_from_" ~ tbl; } }