| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- IMPLEMENTATION MODULE SQLiteUtils ;
- FROM SYSTEM IMPORT ADDRESS, ADR;
- FROM SQLite IMPORT DbHandle, StmtHandle, ContextHandle, ValueHandle,
- sqlite3_libversion, sqlite3_errmsg, sqlite3_errstr,
- sqlite3_exec, sqlite3_free,
- sqlite3_bind_text, sqlite3_bind_blob,
- sqlite3_value_text, sqlite3_result_text;
- FROM libc IMPORT strlen, strncpy;
- PROCEDURE CStrToM2 (src: ADDRESS; VAR dst: ARRAY OF CHAR);
- VAR n: CARDINAL;
- BEGIN
- IF HIGH(dst) < 0 THEN RETURN END;
- IF src = NIL THEN dst[0] := 0C; RETURN END;
- n := VAL(CARDINAL, strlen(src));
- IF n > HIGH(dst) THEN n := HIGH(dst) END;
- strncpy(ADR(dst), src, n);
- IF n <= HIGH(dst) THEN dst[n] := 0C END
- END CStrToM2;
- PROCEDURE ErrMsg (db: DbHandle; VAR buf: ARRAY OF CHAR);
- BEGIN
- CStrToM2(sqlite3_errmsg(db), buf)
- END ErrMsg;
- PROCEDURE ErrStr (code: INTEGER; VAR buf: ARRAY OF CHAR);
- BEGIN
- CStrToM2(sqlite3_errstr(code), buf)
- END ErrStr;
- PROCEDURE LibVersionStr (VAR buf: ARRAY OF CHAR);
- BEGIN
- CStrToM2(sqlite3_libversion(), buf)
- END LibVersionStr;
- PROCEDURE StaticDestr () : ADDRESS;
- BEGIN
- RETURN VAL(ADDRESS, 0)
- END StaticDestr;
- PROCEDURE TransientDestr () : ADDRESS;
- BEGIN
- RETURN VAL(ADDRESS, -1)
- END TransientDestr;
- PROCEDURE BindTextCopy (stmt: StmtHandle; idx: INTEGER;
- v: ARRAY OF CHAR) : INTEGER;
- BEGIN
- RETURN sqlite3_bind_text(stmt, idx, v, -1, TransientDestr())
- END BindTextCopy;
- PROCEDURE BindBlobCopy (stmt: StmtHandle; idx: INTEGER;
- data: ADDRESS; n: INTEGER) : INTEGER;
- BEGIN
- RETURN sqlite3_bind_blob(stmt, idx, data, n, TransientDestr())
- END BindBlobCopy;
- PROCEDURE ValueText (v: ValueHandle; VAR buf: ARRAY OF CHAR);
- BEGIN
- CStrToM2(sqlite3_value_text(v), buf)
- END ValueText;
- PROCEDURE ResultTextCopy (ctx: ContextHandle; str: ARRAY OF CHAR);
- BEGIN
- sqlite3_result_text(ctx, str, -1, TransientDestr())
- END ResultTextCopy;
- PROCEDURE ExecSimple (db: DbHandle; sql: ARRAY OF CHAR) : INTEGER;
- BEGIN
- RETURN sqlite3_exec(db, sql, NIL, NIL, NIL)
- END ExecSimple;
- PROCEDURE ExecWithErr (db: DbHandle; sql: ARRAY OF CHAR;
- VAR buf: ARRAY OF CHAR) : INTEGER;
- VAR rc: INTEGER; msg: ADDRESS;
- BEGIN
- msg := NIL;
- rc := sqlite3_exec(db, sql, NIL, NIL, ADR(msg));
- IF msg # NIL THEN
- CStrToM2(msg, buf);
- sqlite3_free(msg)
- ELSIF HIGH(buf) >= 0 THEN
- buf[0] := 0C
- END;
- RETURN rc
- END ExecWithErr;
- END SQLiteUtils.
|