[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