Merge branch 'master' into config-checks-ipv6
[mono.git] / mcs / class / Mono.Data.Sqlite / Mono.Data.Sqlite_2.0 / SQLiteConnection.cs
index be663d73253771854511aa6faeab147d922307d2..1e4e46083700282478bdf06024aa63a2c7a41666 100644 (file)
@@ -304,6 +304,9 @@ namespace Mono.Data.Sqlite
     {\r
       base.Dispose(disposing);\r
 \r
+      if (_sql != null)\r
+        _sql.Dispose ();\r
+\r
       if (disposing)\r
         Close();\r
     }\r
@@ -865,14 +868,23 @@ namespace Mono.Data.Sqlite
 \r
         SQLiteOpenFlagsEnum flags = SQLiteOpenFlagsEnum.None;\r
 \r
-        if (SqliteConvert.ToBoolean(FindKey(opts, "FailIfMissing", Boolean.FalseString)) == false)\r
-          flags |= SQLiteOpenFlagsEnum.Create;\r
-\r
         if (SqliteConvert.ToBoolean(FindKey(opts, "Read Only", Boolean.FalseString)) == true)\r
           flags |= SQLiteOpenFlagsEnum.ReadOnly;\r
-        else\r
+        else {\r
           flags |= SQLiteOpenFlagsEnum.ReadWrite;\r
-\r
+          if (SqliteConvert.ToBoolean(FindKey(opts, "FailIfMissing", Boolean.FalseString)) == false)\r
+            flags |= SQLiteOpenFlagsEnum.Create;\r
+        }\r
+       if (SqliteConvert.ToBoolean (FindKey (opts, "FileProtectionComplete", Boolean.FalseString)))\r
+               flags |= SQLiteOpenFlagsEnum.FileProtectionComplete;\r
+       if (SqliteConvert.ToBoolean (FindKey (opts, "FileProtectionCompleteUnlessOpen", Boolean.FalseString)))\r
+               flags |= SQLiteOpenFlagsEnum.FileProtectionCompleteUnlessOpen;\r
+       if (SqliteConvert.ToBoolean (FindKey (opts, "FileProtectionCompleteUntilFirstUserAuthentication", Boolean.FalseString)))\r
+               flags |= SQLiteOpenFlagsEnum.FileProtectionCompleteUntilFirstUserAuthentication;\r
+       if (SqliteConvert.ToBoolean (FindKey (opts, "FileProtectionNone", Boolean.FalseString)))\r
+               flags |= SQLiteOpenFlagsEnum.FileProtectionNone;\r
+       \r
+                               \r
         _sql.Open(fileName, flags, maxPoolSize, usePooling);\r
 \r
         _binaryGuid = (SqliteConvert.ToBoolean(FindKey(opts, "BinaryGUID", Boolean.TrueString)) == true);\r
@@ -1543,8 +1555,10 @@ namespace Mono.Data.Sqlite
                       while (rdIndexes.Read())\r
                       {\r
                         if (rdIndexes.IsDBNull(4) == false)\r
+                        {\r
                           row["INDEX_DEFINITION"] = rdIndexes.GetString(4);\r
-                        break;\r
+                          break;\r
+                        }\r
                       }\r
                     }\r
 \r
@@ -2287,6 +2301,13 @@ namespace Mono.Data.Sqlite
     {\r
       _rollbackHandler(this, EventArgs.Empty);\r
     }\r
+\r
+    // http://www.sqlite.org/c3ref/config.html\r
+    public static void SetConfig (SQLiteConfig config)\r
+    {\r
+      int n = UnsafeNativeMethods.sqlite3_config (config);\r
+      if (n > 0) throw new SqliteException (n, null);\r
+    }\r
   }\r
 \r
   /// <summary>\r