55
66sq3 = ffilib .open ("libsqlite3" )
77
8+ # int sqlite3_open(
9+ # const char *filename, /* Database filename (UTF-8) */
10+ # sqlite3 **ppDb /* OUT: SQLite db handle */
11+ # );
812sqlite3_open = sq3 .func ("i" , "sqlite3_open" , "sp" )
913# int sqlite3_config(int, ...);
1014sqlite3_config = sq3 .func ("i" , "sqlite3_config" , "ii" )
1721# sqlite3_stmt **ppStmt, /* OUT: Statement handle */
1822# const char **pzTail /* OUT: Pointer to unused portion of zSql */
1923# );
20- sqlite3_prepare = sq3 .func ("i" , "sqlite3_prepare " , "psipp" )
24+ sqlite3_prepare = sq3 .func ("i" , "sqlite3_prepare_v2 " , "psipp" )
2125# int sqlite3_finalize(sqlite3_stmt *pStmt);
2226sqlite3_finalize = sq3 .func ("i" , "sqlite3_finalize" , "p" )
2327# int sqlite3_step(sqlite3_stmt*);
2630sqlite3_column_count = sq3 .func ("i" , "sqlite3_column_count" , "p" )
2731# int sqlite3_column_type(sqlite3_stmt*, int iCol);
2832sqlite3_column_type = sq3 .func ("i" , "sqlite3_column_type" , "pi" )
33+ # int sqlite3_column_int(sqlite3_stmt*, int iCol);
2934sqlite3_column_int = sq3 .func ("i" , "sqlite3_column_int" , "pi" )
30- # using "d" return type gives wrong results
35+ # double sqlite3_column_double(sqlite3_stmt*, int iCol);
3136sqlite3_column_double = sq3 .func ("d" , "sqlite3_column_double" , "pi" )
37+ # const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol);
3238sqlite3_column_text = sq3 .func ("s" , "sqlite3_column_text" , "pi" )
3339# sqlite3_int64 sqlite3_last_insert_rowid(sqlite3*);
34- # TODO: should return long int
35- sqlite3_last_insert_rowid = sq3 .func ("i" , "sqlite3_last_insert_rowid" , "p" )
40+ sqlite3_last_insert_rowid = sq3 .func ("l" , "sqlite3_last_insert_rowid" , "p" )
3641# const char *sqlite3_errmsg(sqlite3*);
3742sqlite3_errmsg = sq3 .func ("s" , "sqlite3_errmsg" , "p" )
3843
39- # Too recent
40- ##const char *sqlite3_errstr(int);
41- # sqlite3_errstr = sq3.func("s", "sqlite3_errstr", "i")
42-
4344
4445SQLITE_OK = 0
4546SQLITE_ERROR = 1
@@ -96,18 +97,17 @@ def execute(self, sql, params=None):
9697 if params :
9798 params = [quote (v ) for v in params ]
9899 sql = sql % tuple (params )
99- print (sql )
100100
101101 stmnt_ptr = bytes (get_ptr_size ())
102102 res = sqlite3_prepare (self .h , sql , - 1 , stmnt_ptr , None )
103103 check_error (self .h , res )
104104 self .stmnt = int .from_bytes (stmnt_ptr , sys .byteorder )
105105 self .num_cols = sqlite3_column_count (self .stmnt )
106106
107- # If it's not select, actually execute it here
108- # num_cols == 0 for statements which don't return data (=> modify it)
109107 if not self .num_cols :
110108 v = self .fetchone ()
109+ # If it's not select, actually execute it here
110+ # num_cols == 0 for statements which don't return data (=> modify it)
111111 assert v is None
112112 self .lastrowid = sqlite3_last_insert_rowid (self .h )
113113
@@ -119,7 +119,6 @@ def make_row(self):
119119 res = []
120120 for i in range (self .num_cols ):
121121 t = sqlite3_column_type (self .stmnt , i )
122- # print("type", t)
123122 if t == SQLITE_INTEGER :
124123 res .append (sqlite3_column_int (self .stmnt , i ))
125124 elif t == SQLITE_FLOAT :
@@ -132,7 +131,6 @@ def make_row(self):
132131
133132 def fetchone (self ):
134133 res = sqlite3_step (self .stmnt )
135- # print("step:", res)
136134 if res == SQLITE_DONE :
137135 return None
138136 if res == SQLITE_ROW :
0 commit comments