Skip to content

Commit f5b67b2

Browse files
committed
unix-ffi/sqlite3: Clean-up sqlite3 module.
The sqlite3.py file previously had some left in (commented) debug prints and other remarks, which can now be removed. Every function now has their function signature commented above them, along with sqlite3_prepare being changed to use v2 as the other version is classified as legacy. The tests now actually close their Cursors and Connections at the end, which solves an issue with close throwing an error of unfinished statements. Signed-off-by: Robert Klink <[email protected]>
1 parent 7a44338 commit f5b67b2

File tree

3 files changed

+17
-13
lines changed

3 files changed

+17
-13
lines changed

unix-ffi/sqlite3/sqlite3.py

+11-13
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@
55

66
sq3 = ffilib.open("libsqlite3")
77

8+
# int sqlite3_open(
9+
# const char *filename, /* Database filename (UTF-8) */
10+
# sqlite3 **ppDb /* OUT: SQLite db handle */
11+
# );
812
sqlite3_open = sq3.func("i", "sqlite3_open", "sp")
913
# int sqlite3_config(int, ...);
1014
sqlite3_config = sq3.func("i", "sqlite3_config", "ii")
@@ -17,7 +21,7 @@
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);
2226
sqlite3_finalize = sq3.func("i", "sqlite3_finalize", "p")
2327
# int sqlite3_step(sqlite3_stmt*);
@@ -26,20 +30,17 @@
2630
sqlite3_column_count = sq3.func("i", "sqlite3_column_count", "p")
2731
# int sqlite3_column_type(sqlite3_stmt*, int iCol);
2832
sqlite3_column_type = sq3.func("i", "sqlite3_column_type", "pi")
33+
# int sqlite3_column_int(sqlite3_stmt*, int iCol);
2934
sqlite3_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);
3136
sqlite3_column_double = sq3.func("d", "sqlite3_column_double", "pi")
37+
# const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol);
3238
sqlite3_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*);
3742
sqlite3_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

4445
SQLITE_OK = 0
4546
SQLITE_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:

unix-ffi/sqlite3/test_sqlite3.py

+3
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,6 @@
1717
assert row == e
1818

1919
assert expected == []
20+
21+
cur.close()
22+
conn.close()

unix-ffi/sqlite3/test_sqlite3_2.py

+3
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,6 @@
1010
cur.execute("SELECT * FROM foo")
1111
assert cur.fetchone() == (42,)
1212
assert cur.fetchone() is None
13+
14+
cur.close()
15+
conn.close()

0 commit comments

Comments
 (0)