[svn] r6774: nemerle/trunk: macros/Data.n snippets/sql.n
snippets/sql1.n
nazgul
svnadmin at nemerle.org
Sun Oct 22 20:23:52 CEST 2006
Log:
Make reader loop check for DB null values
Author: nazgul
Date: Sun Oct 22 20:22:46 2006
New Revision: 6774
Modified:
nemerle/trunk/macros/Data.n
nemerle/trunk/snippets/sql.n
nemerle/trunk/snippets/sql1.n
Modified: nemerle/trunk/macros/Data.n
==============================================================================
--- nemerle/trunk/macros/Data.n (original)
+++ nemerle/trunk/macros/Data.n Sun Oct 22 20:22:46 2006
@@ -189,15 +189,10 @@
foreach (myRow :> DataRow in table.Rows){
def col_type = myRow["DataType"].ToString ();
def col_name = myRow["ColumnName"].ToString ();
- def type_suff =
- if (col_type.StartsWith ("System."))
- col_type.Substring (7)
- else col_type;
+ def fetchexpr = Helper.GenerateFetchExpr (Nemerle.Macros.ImplicitCTX ().Manager, col_type, col_num);
// create runtime variables definition according to extracted types
- bodyseq = <[ def $(col_name : usesite) =
- reader.$("Get" + type_suff : usesite) ($(col_num : int)) ]>
- :: bodyseq;
+ bodyseq = <[ def $(col_name : usesite) = $fetchexpr ]> :: bodyseq;
++col_num;
};
@@ -367,5 +362,24 @@
});
(fquery.ToString (), tpars, pars_init)
}
+
+ public GenerateFetchExpr (mng : ManagerClass, typeName : string, colIdx : int) : Parsetree.PExpr {
+ def type_suff =
+ if (typeName.StartsWith ("System."))
+ typeName.Substring (7)
+ else typeName;
+
+ def retTy =
+ match (mng.NameTree.LookupExactType (typeName)) {
+ | Some (t) =>
+ def rawTy = <[ $(Util.ExprOfQid (typeName)) ]>;
+ if (t.GetMemType ().CanBeNull) rawTy
+ else <[ $rawTy ? ]>
+ | None => Message.FatalError ("DB provider returned unknown type name: " + typeName);
+ }
+
+ <[ if (reader.IsDBNull ($(colIdx : int))) null : $retTy
+ else reader.$("Get" + type_suff : usesite) ($(colIdx : int)) : $retTy ]>
+ }
}
}
Modified: nemerle/trunk/snippets/sql.n
==============================================================================
--- nemerle/trunk/snippets/sql.n (original)
+++ nemerle/trunk/snippets/sql.n Sun Oct 22 20:22:46 2006
@@ -87,7 +87,7 @@
ExecuteReaderLoop (
"SELECT a AS number, b, COUNT(*) AS amount FROM intstr "
"WHERE a = $tt or b = $ty GROUP BY a, b", dbcon, {
- Nemerle.IO.printf ("%d %s\n", number, b);
+ Nemerle.IO.printf ("%d %s\n", number.Value, b);
Console.WriteLine (amount)
});
Modified: nemerle/trunk/snippets/sql1.n
==============================================================================
--- nemerle/trunk/snippets/sql1.n (original)
+++ nemerle/trunk/snippets/sql1.n Sun Oct 22 20:22:46 2006
@@ -167,7 +167,7 @@
/// (by connecting to database)
ExecuteReaderLoop ("SELECT * FROM Ludzie WHERE imie = $myparm", dbcon,
{
- Nemerle.IO.printf ("Name: %s %s %d\n", imie, nazwisko, wiek)
+ Nemerle.IO.printf ("Name: %s %s %d\n", imie, nazwisko, wiek.Value)
});
//_ = ExecuteNonQuery ("INSERT INTO intstr VALUES (5, 'beber')", dbcon);
@@ -179,7 +179,7 @@
ExecuteReaderLoop (
"SELECT a AS number, b, COUNT(*) AS amount FROM intstr "
"WHERE a = $tt or b = $ty GROUP BY a, b", dbcon, {
- Nemerle.IO.printf ("%d %s\n", number, b);
+ Nemerle.IO.printf ("%d %s\n", number.Value, b);
Console.WriteLine (amount)
});
More information about the svn
mailing list