[vala] sqlite3: add wrapper methods for sqlite3_exec and sqlite3_get_table



commit 2bc4b792bc22fe387d00637ecdd1c78a8950d692
Author: Evan Nemerson <evan coeus-group com>
Date:   Sat Apr 10 11:41:08 2010 -0700

    sqlite3: add wrapper methods for sqlite3_exec and sqlite3_get_table
    
    Fixes bug 579364.

 vapi/sqlite3.vapi |   51 +++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 45 insertions(+), 6 deletions(-)
---
diff --git a/vapi/sqlite3.vapi b/vapi/sqlite3.vapi
index 1e725e0..43d71e0 100644
--- a/vapi/sqlite3.vapi
+++ b/vapi/sqlite3.vapi
@@ -28,22 +28,52 @@ namespace Sqlite {
 	public class Database {
 		public int busy_timeout (int ms);
 		public int changes ();
-		public int exec (string sql, Callback? sqlite3_callback = null, out string errmsg = null);
+		[CCode (cname = "sqlite3_exec")]
+		private int _exec (string sql, Callback? sqlite3_callback = null, out unowned string errmsg = null);
+		[CCode (cname = "_vala_sqlite3_exec")]
+		public int exec (string sql, Callback? sqlite3_callback = null, out string errmsg = null) {
+			unowned string sqlite_errmsg;
+			var ec = this._exec (sql, sqlite3_callback, out sqlite_errmsg);
+			if (sqlite_errmsg != null) {
+				errmsg = sqlite_errmsg;
+				Sqlite.Memory.free ((void*) sqlite_errmsg);
+			}
+			return ec;
+		}
 		public int extended_result_codes (int onoff);
 		public int get_autocommit ();
 		public void interrupt ();
 		public int64 last_insert_rowid ();
 		public int total_changes ();
-
 		public int complete (string sql);
-		public int get_table (string sql, [CCode (array_length = false)] out unowned string[] resultp, out int nrow, out int ncolumn, out string errmsg);
-		public static void free_table ([CCode (array_length = false)] string[] result);
+		[CCode (cname = "sqlite3_get_table")]
+		private int _get_table (string sql, [CCode (array_length = false)] out unowned string[] resultp, out int nrow, out int ncolumn, out unowned string? errmsg = null);
+		private static void free_table ([CCode (array_length = false)] string[] result);
+		[CCode (cname = "_vala_sqlite3_get_table")]
+		public int get_table (string sql, out string[] resultp, out int nrow, out int ncolumn, out string? errmsg = null) {
+			unowned string sqlite_errmsg;
+			unowned string[] sqlite_resultp;
+
+			var ec = this._get_table (sql, out sqlite_resultp, out nrow, out ncolumn, out sqlite_errmsg);
+
+			resultp = new string[(nrow + 1) * ncolumn];
+			for (var entry = 0 ; entry < resultp.length ; entry++ ) {
+				resultp[entry] = sqlite_resultp[entry];
+			}
+			Sqlite.Database.free_table (sqlite_resultp);
+
+			if (sqlite_errmsg != null) {
+				errmsg = sqlite_errmsg;
+				Sqlite.Memory.free ((void*) sqlite_errmsg);
+			}
+			return ec;
+		}
 		public static int open (string filename, out Database db);
 		public static int open_v2 (string filename, out Database db, int flags = OPEN_READWRITE | OPEN_CREATE, string? zVfs = null);
 		public int errcode ();
 		public unowned string errmsg ();
-		public int prepare (string sql, int n_bytes, out Statement stmt, out string tail = null);
-		public int prepare_v2 (string sql, int n_bytes, out Statement stmt, out string tail = null);
+		public int prepare (string sql, int n_bytes, out Statement stmt, out unowned string tail = null);
+		public int prepare_v2 (string sql, int n_bytes, out Statement stmt, out unowned string tail = null);
 		public void trace (TraceCallback? xtrace);
 		public void profile (ProfileCallback? xprofile);
 		public void progress_handler (int n_opcodes, Sqlite.ProgressCallback? progress_handler);
@@ -234,6 +264,15 @@ namespace Sqlite {
 		public unowned string sql ();
 	}
 
+	namespace Memory {
+		[CCode (cname = "sqlite3_malloc")]
+		public static void* malloc (int n_bytes);
+		[CCode (cname = "sqlite3_realloc")]
+		public static void* realloc (void* mem, int n_bytes);
+		[CCode (cname = "sqlite3_free")]
+		public static void free (void* mem);
+	}
+
 	[Compact]
 	[CCode (cname = "sqlite3_mutex")]
 	public class Mutex {



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