[chronojump] Country creation as a transaction



commit 60a9141e929ae2d63ceb120b023f21aae49a0527
Author: Xavier de Blas <xaviblas gmail com>
Date:   Mon Nov 3 00:55:31 2014 +0100

    Country creation as a transaction

 src/sqlite/country.cs |   44 ++++++++++++++++++++++++++++----------------
 src/sqlite/encoder.cs |   20 +++++++++++++++-----
 2 files changed, 43 insertions(+), 21 deletions(-)
---
diff --git a/src/sqlite/country.cs b/src/sqlite/country.cs
index f26d408..ad80a7b 100644
--- a/src/sqlite/country.cs
+++ b/src/sqlite/country.cs
@@ -48,19 +48,30 @@ class SqliteCountry : Sqlite
        {
                conversionSubRateTotal = countries.Length;
                conversionSubRate = 0;
-               foreach(string myString in countries) {
-                       //put in db only english name
-                       string [] strFull = myString.Split(new char[] {':'});
-                       Insert(
-                                       true,                   //dbconOpened
-                                       strFull[3],             //code
-                                       strFull[1],             //name (english)
-                                       strFull[0]              //continent
-                             );
-                       conversionSubRate ++;
+
+               using(SqliteTransaction tr = dbcon.BeginTransaction())
+               {
+                       using (SqliteCommand dbcmdTr = dbcon.CreateCommand())
+                       {
+                               dbcmdTr.Transaction = tr;
+       
+                               foreach(string myString in countries) {
+                                       //put in db only english name
+                                       string [] strFull = myString.Split(new char[] {':'});
+                                       Insert(
+                                                       true,                   //dbconOpened
+                                                       dbcmdTr,
+                                                       strFull[3],             //code
+                                                       strFull[1],             //name (english)
+                                                       strFull[0]              //continent
+                                             );
+                                       conversionSubRate ++;
+                               }
+                       }
+                       tr.Commit();
                }
        }
-       public static int Insert(bool dbconOpened, string code, string nameEnglish, string continent)
+       public static void Insert(bool dbconOpened, SqliteCommand mycmd, string code, string nameEnglish, 
string continent)
        {
                if(! dbconOpened)
                        Sqlite.Open();
@@ -72,19 +83,20 @@ class SqliteCountry : Sqlite
                        " (uniqueID, code, name, continent) VALUES (NULL, \"" + code + "\", \"" + 
                        nameEnglish + "\", \"" + continent + "\")";
 
-               dbcmd.CommandText = myString;
-               dbcmd.ExecuteNonQuery();
+               mycmd.CommandText = myString;
+               Log.WriteLine(mycmd.CommandText.ToString());
+               mycmd.ExecuteNonQuery();
 
+               /*
                //int myLast = dbcon.LastInsertRowId;
                //http://stackoverflow.com/questions/4341178/getting-the-last-insert-id-with-sqlite-net-in-c
                myString = @"select last_insert_rowid()";
-               dbcmd.CommandText = myString;
+               mycmd.CommandText = myString;
                int myLast = Convert.ToInt32(dbcmd.ExecuteScalar()); // Need to type-cast since 
`ExecuteScalar` returns an object.
+               */
 
                if(! dbconOpened)
                        Sqlite.Close();
-
-               return myLast;
        }
 
        public static string [] SelectCountriesOfAContinent(string continent, bool insertUndefined)
diff --git a/src/sqlite/encoder.cs b/src/sqlite/encoder.cs
index 889a682..7149584 100644
--- a/src/sqlite/encoder.cs
+++ b/src/sqlite/encoder.cs
@@ -104,16 +104,26 @@ class SqliteEncoder : Sqlite
 
                return myLast;
        }
-       
+
+       //normal Update call dbcmd will be used 
        public static void Update(bool dbconOpened, EncoderSQL es)
        {
+               update(dbconOpened, es, dbcmd);
+       }
+       //Transaction Update call dbcmdTr will be used  
+       public static void Update(bool dbconOpened, EncoderSQL es, SqliteCommand dbcmdTr) 
+       {
+               update(dbconOpened, es, dbcmdTr);
+       }
+       private static void update(bool dbconOpened, EncoderSQL es, SqliteCommand mycmd)
+       {
                if(! dbconOpened)
                        Sqlite.Open();
 
                if(es.uniqueID == "-1")
                        es.uniqueID = "NULL";
 
-               dbcmd.CommandText = "UPDATE " + Constants.EncoderTable + " SET " +
+               mycmd.CommandText = "UPDATE " + Constants.EncoderTable + " SET " +
                                " personID = " + es.personID +
                                ", sessionID = " + es.sessionID +
                                ", exerciseID = " + es.exerciseID +
@@ -134,8 +144,8 @@ class SqliteEncoder : Sqlite
                                "', future3 = '" + es.future3 + 
                                "' WHERE uniqueID == " + es.uniqueID ;
 
-               Log.WriteLine(dbcmd.CommandText.ToString());
-               dbcmd.ExecuteNonQuery();
+               Log.WriteLine(mycmd.CommandText.ToString());
+               mycmd.ExecuteNonQuery();
 
                if(! dbconOpened)
                        Sqlite.Close();
@@ -159,7 +169,7 @@ class SqliteEncoder : Sqlite
                                        if(eSQL.status != checkboxes[count]) {
                                                eSQL.status = checkboxes[count];
 
-                                               SqliteEncoder.Update(true, eSQL);
+                                               SqliteEncoder.Update(true, eSQL, dbcmdTr);
                                        }
 
                                        count ++;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]