diff options
| author | 2021-10-13 01:01:41 +0200 | |
|---|---|---|
| committer | 2021-10-13 19:37:06 +0200 | |
| commit | 660ebd3dbf4764a21ac17a2fc0b17d2a23264074 (patch) | |
| tree | 7712896bdff193d0b0462fdb52bb8e578a38b8cd /sqlite.zig | |
| parent | Merge pull request #53 from kacheproject/dynamic-stmt-oldbuild (diff) | |
| download | zig-sqlite-660ebd3dbf4764a21ac17a2fc0b17d2a23264074.tar.gz zig-sqlite-660ebd3dbf4764a21ac17a2fc0b17d2a23264074.tar.xz zig-sqlite-660ebd3dbf4764a21ac17a2fc0b17d2a23264074.zip | |
add the StatementType function
This function returns the type of a statement as would be returned by
Db.prepare.
Needed to be able to store a statement in a struct.
Diffstat (limited to 'sqlite.zig')
| -rw-r--r-- | sqlite.zig | 34 |
1 files changed, 24 insertions, 10 deletions
| @@ -488,7 +488,7 @@ pub const Db = struct { | |||
| 488 | /// prepareWithDiags is like `prepare` but takes an additional options argument. | 488 | /// prepareWithDiags is like `prepare` but takes an additional options argument. |
| 489 | pub fn prepareWithDiags(self: *Self, comptime query: []const u8, options: QueryOptions) !blk: { | 489 | pub fn prepareWithDiags(self: *Self, comptime query: []const u8, options: QueryOptions) !blk: { |
| 490 | @setEvalBranchQuota(100000); | 490 | @setEvalBranchQuota(100000); |
| 491 | break :blk Statement(.{}, ParsedQuery.from(query)); | 491 | break :blk StatementType(.{}, query); |
| 492 | } { | 492 | } { |
| 493 | @setEvalBranchQuota(100000); | 493 | @setEvalBranchQuota(100000); |
| 494 | const parsed_query = ParsedQuery.from(query); | 494 | const parsed_query = ParsedQuery.from(query); |
| @@ -516,7 +516,7 @@ pub const Db = struct { | |||
| 516 | /// If you want additional error information in case of failures, use `prepareWithDiags`. | 516 | /// If you want additional error information in case of failures, use `prepareWithDiags`. |
| 517 | pub fn prepare(self: *Self, comptime query: []const u8) !blk: { | 517 | pub fn prepare(self: *Self, comptime query: []const u8) !blk: { |
| 518 | @setEvalBranchQuota(100000); | 518 | @setEvalBranchQuota(100000); |
| 519 | break :blk Statement(.{}, ParsedQuery.from(query)); | 519 | break :blk StatementType(.{}, query); |
| 520 | } { | 520 | } { |
| 521 | @setEvalBranchQuota(100000); | 521 | @setEvalBranchQuota(100000); |
| 522 | const parsed_query = ParsedQuery.from(query); | 522 | const parsed_query = ParsedQuery.from(query); |
| @@ -1028,6 +1028,20 @@ pub fn Iterator(comptime Type: type) type { | |||
| 1028 | }; | 1028 | }; |
| 1029 | } | 1029 | } |
| 1030 | 1030 | ||
| 1031 | /// StatementType returns the type of a statement you would get by calling Db.prepare and derivatives. | ||
| 1032 | /// | ||
| 1033 | /// Useful if you want to store a statement in a struct, for example: | ||
| 1034 | /// | ||
| 1035 | /// const MyStatements = struct { | ||
| 1036 | /// insert_stmt: sqlite.StatementType(.{}, insert_query), | ||
| 1037 | /// delete_stmt: sqlite.StatementType(.{}, delete_query), | ||
| 1038 | /// }; | ||
| 1039 | /// | ||
| 1040 | pub fn StatementType(comptime opts: StatementOptions, comptime query: []const u8) type { | ||
| 1041 | @setEvalBranchQuota(100000); | ||
| 1042 | return Statement(opts, ParsedQuery.from(query)); | ||
| 1043 | } | ||
| 1044 | |||
| 1031 | pub const StatementOptions = struct {}; | 1045 | pub const StatementOptions = struct {}; |
| 1032 | 1046 | ||
| 1033 | /// DynamicStatement represents a statement in sqlite3. It almost works like sqlite3_stmt. | 1047 | /// DynamicStatement represents a statement in sqlite3. It almost works like sqlite3_stmt. |
| @@ -1989,7 +2003,7 @@ test "sqlite: read a single text value" { | |||
| 1989 | inline for (types) |typ| { | 2003 | inline for (types) |typ| { |
| 1990 | const query = "SELECT name FROM user WHERE id = ?{usize}"; | 2004 | const query = "SELECT name FROM user WHERE id = ?{usize}"; |
| 1991 | 2005 | ||
| 1992 | var stmt: Statement(.{}, ParsedQuery.from(query)) = try db.prepare(query); | 2006 | var stmt: StatementType(.{}, query) = try db.prepare(query); |
| 1993 | defer stmt.deinit(); | 2007 | defer stmt.deinit(); |
| 1994 | 2008 | ||
| 1995 | const name = try stmt.oneAlloc(typ, &arena.allocator, .{}, .{ | 2009 | const name = try stmt.oneAlloc(typ, &arena.allocator, .{}, .{ |
| @@ -2036,7 +2050,7 @@ test "sqlite: read a single integer value" { | |||
| 2036 | inline for (types) |typ| { | 2050 | inline for (types) |typ| { |
| 2037 | const query = "SELECT age FROM user WHERE id = ?{usize}"; | 2051 | const query = "SELECT age FROM user WHERE id = ?{usize}"; |
| 2038 | 2052 | ||
| 2039 | var stmt: Statement(.{}, ParsedQuery.from(query)) = try db.prepare(query); | 2053 | var stmt: StatementType(.{}, query) = try db.prepare(query); |
| 2040 | defer stmt.deinit(); | 2054 | defer stmt.deinit(); |
| 2041 | 2055 | ||
| 2042 | var age = try stmt.one(typ, .{}, .{ | 2056 | var age = try stmt.one(typ, .{}, .{ |
| @@ -2070,7 +2084,7 @@ test "sqlite: read a single value into an enum backed by an integer" { | |||
| 2070 | 2084 | ||
| 2071 | // Use one | 2085 | // Use one |
| 2072 | { | 2086 | { |
| 2073 | var stmt: Statement(.{}, ParsedQuery.from(query)) = try db.prepare(query); | 2087 | var stmt: StatementType(.{}, query) = try db.prepare(query); |
| 2074 | defer stmt.deinit(); | 2088 | defer stmt.deinit(); |
| 2075 | 2089 | ||
| 2076 | const b = try stmt.one(IntColor, .{}, .{ | 2090 | const b = try stmt.one(IntColor, .{}, .{ |
| @@ -2082,7 +2096,7 @@ test "sqlite: read a single value into an enum backed by an integer" { | |||
| 2082 | 2096 | ||
| 2083 | // Use oneAlloc | 2097 | // Use oneAlloc |
| 2084 | { | 2098 | { |
| 2085 | var stmt: Statement(.{}, ParsedQuery.from(query)) = try db.prepare(query); | 2099 | var stmt: StatementType(.{}, query) = try db.prepare(query); |
| 2086 | defer stmt.deinit(); | 2100 | defer stmt.deinit(); |
| 2087 | 2101 | ||
| 2088 | const b = try stmt.oneAlloc(IntColor, &arena.allocator, .{}, .{ | 2102 | const b = try stmt.oneAlloc(IntColor, &arena.allocator, .{}, .{ |
| @@ -2107,7 +2121,7 @@ test "sqlite: read a single value into an enum backed by a string" { | |||
| 2107 | 2121 | ||
| 2108 | const query = "SELECT favorite_color FROM user WHERE id = ?{usize}"; | 2122 | const query = "SELECT favorite_color FROM user WHERE id = ?{usize}"; |
| 2109 | 2123 | ||
| 2110 | var stmt: Statement(.{}, ParsedQuery.from(query)) = try db.prepare(query); | 2124 | var stmt: StatementType(.{}, query) = try db.prepare(query); |
| 2111 | defer stmt.deinit(); | 2125 | defer stmt.deinit(); |
| 2112 | 2126 | ||
| 2113 | const b = try stmt.oneAlloc(TestUser.Color, &arena.allocator, .{}, .{ | 2127 | const b = try stmt.oneAlloc(TestUser.Color, &arena.allocator, .{}, .{ |
| @@ -2123,7 +2137,7 @@ test "sqlite: read a single value into void" { | |||
| 2123 | 2137 | ||
| 2124 | const query = "SELECT age FROM user WHERE id = ?{usize}"; | 2138 | const query = "SELECT age FROM user WHERE id = ?{usize}"; |
| 2125 | 2139 | ||
| 2126 | var stmt: Statement(.{}, ParsedQuery.from(query)) = try db.prepare(query); | 2140 | var stmt: StatementType(.{}, query) = try db.prepare(query); |
| 2127 | defer stmt.deinit(); | 2141 | defer stmt.deinit(); |
| 2128 | 2142 | ||
| 2129 | _ = try stmt.one(void, .{}, .{ | 2143 | _ = try stmt.one(void, .{}, .{ |
| @@ -2137,7 +2151,7 @@ test "sqlite: read a single value into bool" { | |||
| 2137 | 2151 | ||
| 2138 | const query = "SELECT id FROM user WHERE id = ?{usize}"; | 2152 | const query = "SELECT id FROM user WHERE id = ?{usize}"; |
| 2139 | 2153 | ||
| 2140 | var stmt: Statement(.{}, ParsedQuery.from(query)) = try db.prepare(query); | 2154 | var stmt: StatementType(.{}, query) = try db.prepare(query); |
| 2141 | defer stmt.deinit(); | 2155 | defer stmt.deinit(); |
| 2142 | 2156 | ||
| 2143 | const b = try stmt.one(bool, .{}, .{ | 2157 | const b = try stmt.one(bool, .{}, .{ |
| @@ -2159,7 +2173,7 @@ test "sqlite: insert bool and bind bool" { | |||
| 2159 | 2173 | ||
| 2160 | const query = "SELECT id FROM article WHERE is_published = ?{bool}"; | 2174 | const query = "SELECT id FROM article WHERE is_published = ?{bool}"; |
| 2161 | 2175 | ||
| 2162 | var stmt: Statement(.{}, ParsedQuery.from(query)) = try db.prepare(query); | 2176 | var stmt: StatementType(.{}, query) = try db.prepare(query); |
| 2163 | defer stmt.deinit(); | 2177 | defer stmt.deinit(); |
| 2164 | 2178 | ||
| 2165 | const b = try stmt.one(bool, .{}, .{ | 2179 | const b = try stmt.one(bool, .{}, .{ |