commit 703acc9173987c8a9ea49800cb096680a723618d from: Omar Polo date: Sun Dec 31 12:44:51 2023 UTC sqlite3: "port" missing open flags and error codes/strings commit - dcec993201a430c8f02ce3c20e450d472fe6cabe commit + 703acc9173987c8a9ea49800cb096680a723618d blob - f78e1d14c74e488a815fcce7cc03c68237b90d65 blob + 7e4cef618dc5b34ed8dabb754e351e60900af6eb --- sqlite3/errors.ha +++ sqlite3/errors.ha @@ -25,26 +25,129 @@ def sqlite_ok: int = 0; def sqlite_row: int = 100; def sqlite_done: int = 101; -export type sqlite_error = !void; -export type sqlite_internal = !void; -export type sqlite_perm = !void; -export type sqlite_abort = !void; -export type sqlite_busy = !void; -export type sqlite_locked = !void; -// ... -export type sqlite_unknown_error = !void; +export type generic = !void; +export type internal = !void; +export type perm = !void; +export type abort_requested = !void; +export type busy = !void; +export type locked = !void; +export type nomem = !void; +export type readonly = !void; +export type interrupt = !void; +export type ioerr = !void; +export type corrupt = !void; +export type notfound = !void; +export type full = !void; +export type cantopen = !void; +export type protocol = !void; +export type empty = !void; // Internal only +export type schema = !void; +export type toobig = !void; +export type constraint = !void; +export type mismatch = !void; +export type misuse = !void; +export type nolfs = !void; +export type auth = !void; +export type format = !void; // Not used +export type range = !void; +export type notadb = !void; +export type notice = !void; +export type warning = !void; -export type error = !(sqlite_error | sqlite_internal | sqlite_perm | - sqlite_abort | sqlite_busy | sqlite_locked | - sqlite_unknown_error); +export type error = !( + generic | + internal | + perm | + abort_requested | + busy | + locked | + nomem | + readonly | + interrupt | + ioerr | + corrupt | + notfound | + full | + cantopen | + protocol | + empty | + schema | + toobig | + constraint | + mismatch | + misuse | + nolfs | + auth | + format | + range | + notadb | + notice | + warning +); export fn strerror(err: error) str = { - return ""; + match (err) { + case internal => return "Internal logic error in SQLite"; + case perm => return "Access permission denied"; + case abort_requested => return "Callback routine requested an abort"; + case busy => return "The database file is locked"; + case locked => return "A table in the dabatase is locked"; + case nomem => return "A malloc() failed"; + case readonly => return "Attempt to write a readonly database"; + case interrupt => return "Operation terminated by sqlite3_interrupt()"; + case ioerr => return "Some kind of disk I/O error occurred"; + case corrupt => return "The database disk image is malformed"; + case notfound => return "Unknown opcode in sqlite3_file_control()"; + case full => return "Insertion failed because database is full"; + case cantopen => return "Unable to open the database file"; + case protocol => return "Database lock protocol error"; + case empty => return "Internal use only"; + case schema => return "The database schema changed"; + case toobig => return "String or BLOB exceeds size limit"; + case constraint => return "Abort due to constraint violation"; + case mismatch => return "Data type mismatch"; + case misuse => return "Library used incorrectly"; + case nolfs => return "Uses OS features not supported on host"; + case auth => return "Authorization denied"; + case format => return "Not used"; + case range => return "2nd parameter to sqlite3::bind out of range"; + case notadb => return "File opened that is not a database file"; + case notice => return "Notifications from sqlite3_log()"; + case warning => return "Warnings from sqlite3_log()"; + case => return "Generic error"; + }; }; fn code2err(code: int) error = { switch (code) { - case 1 => return sqlite_error; - case => return sqlite_unknown_error; + case 2 => return internal; + case 3 => return perm; + case 4 => return abort_requested; + case 5 => return busy; + case 6 => return locked; + case 7 => return nomem; + case 8 => return readonly; + case 9 => return interrupt; + case 10 => return ioerr; + case 11 => return corrupt; + case 12 => return notfound; + case 13 => return full; + case 14 => return cantopen; + case 15 => return protocol; + case 16 => return empty; + case 17 => return schema; + case 18 => return toobig; + case 19 => return constraint; + case 20 => return mismatch; + case 21 => return misuse; + case 22 => return nolfs; + case 23 => return auth; + case 24 => return format; + case 25 => return range; + case 26 => return notadb; + case 27 => return notice; + case 28 => return warning; + + case => return generic; }; }; blob - f8183b8d93b60e64fc44c3442b4168c2b45717dd blob + 3257770b7fa4109acb305de5201ac6c1caf0aa4a --- sqlite3/sqlite3.ha +++ sqlite3/sqlite3.ha @@ -35,9 +35,18 @@ export def OPEN_DELETEONCLOSE: int = 0x00000008; // VF export def OPEN_EXCLUSIVE: int = 0x00000010; // VFS only export def OPEN_AUTOPROXY: int = 0x00000020; // VFS only export def OPEN_URI: int = 0x00000040; -// ... +export def OPEN_MEMORY: int = 0x00000080; +export def OPEN_MAIN_DB: int = 0x00000100; // VFS only +export def OPEN_TEMP_DB: int = 0x00000200; // VFS only +export def OPEN_TRANSIENT_DB: int = 0x00000400; // VFS ONLY +export def OPEN_MAIN_JOURNAL: int = 0x00000800; // VFS ONLY +export def OPEN_TEMP_JOURNAL: int = 0x00001000; // VFS ONLY +export def OPEN_SUBJOURNAL: int = 0x00002000; // VFS ONLY +export def OPEN_SUPER_JOURNAL: int = 0x00004000; // VFS ONLY export def OPEN_NOMUTEX: int = 0x00008000; -// .. +export def OPEN_FULLMUTEX: int = 0x00010000; +export def OPEN_SHAREDCACHE: int = 0x00020000; +export def OPEN_PRIVATECACHE: int = 0x00040000; export def OPEN_WAL: int = 0x00080000; // VFS only export def OPEN_NOFOLLOW: int = 0x01000000; export def OPEN_EXRESCODE: int = 0x02000000; @@ -118,7 +127,7 @@ fn bind_parameter_index(stmt: statement, col: (str | i let ret = libsqlite3_bind_parameter_index(stmt: *opaque, n); if (ret == 0) { - return sqlite_error; + return range; }; return ret;