diff options
| author | 2025-06-08 11:39:57 -0600 | |
|---|---|---|
| committer | 2025-06-08 11:39:57 -0600 | |
| commit | 876b389e160f694c7ee487f970de62097d97d57b (patch) | |
| tree | 240a8d97de3c63ccc4bfdcfa148a1380a6d5f7a5 | |
| parent | Merge pull request #185 from vrischmann/update-sqlite (diff) | |
| download | zig-sqlite-876b389e160f694c7ee487f970de62097d97d57b.tar.gz zig-sqlite-876b389e160f694c7ee487f970de62097d97d57b.tar.xz zig-sqlite-876b389e160f694c7ee487f970de62097d97d57b.zip | |
fix https://github.com/vrischmann/zig-sqlite/issues/187
| -rw-r--r-- | query.zig | 25 |
1 files changed, 23 insertions, 2 deletions
| @@ -53,6 +53,11 @@ pub fn ParsedQuery(comptime tmp_query: []const u8) type { | |||
| 53 | var pos = 0; | 53 | var pos = 0; |
| 54 | var state = .start; | 54 | var state = .start; |
| 55 | 55 | ||
| 56 | // This holds the starting character of the string while | ||
| 57 | // state is .inside_string so that we know which type of | ||
| 58 | // string we're exiting from | ||
| 59 | var string_starting_character = null; | ||
| 60 | |||
| 56 | var current_bind_marker_type: [256]u8 = undefined; | 61 | var current_bind_marker_type: [256]u8 = undefined; |
| 57 | var current_bind_marker_type_pos = 0; | 62 | var current_bind_marker_type_pos = 0; |
| 58 | 63 | ||
| @@ -75,6 +80,7 @@ pub fn ParsedQuery(comptime tmp_query: []const u8) type { | |||
| 75 | }, | 80 | }, |
| 76 | '\'', '"', '[', '`' => { | 81 | '\'', '"', '[', '`' => { |
| 77 | state = .inside_string; | 82 | state = .inside_string; |
| 83 | string_starting_character = c; | ||
| 78 | buf[pos] = c; | 84 | buf[pos] = c; |
| 79 | pos += 1; | 85 | pos += 1; |
| 80 | }, | 86 | }, |
| @@ -84,8 +90,23 @@ pub fn ParsedQuery(comptime tmp_query: []const u8) type { | |||
| 84 | }, | 90 | }, |
| 85 | }, | 91 | }, |
| 86 | .inside_string => switch (c) { | 92 | .inside_string => switch (c) { |
| 87 | '\'', '"', ']', '`' => { | 93 | '\'' => { |
| 88 | state = .start; | 94 | if (string_starting_character == '\'') state = .start; |
| 95 | buf[pos] = c; | ||
| 96 | pos += 1; | ||
| 97 | }, | ||
| 98 | '"' => { | ||
| 99 | if (string_starting_character == '"') state = .start; | ||
| 100 | buf[pos] = c; | ||
| 101 | pos += 1; | ||
| 102 | }, | ||
| 103 | ']' => { | ||
| 104 | if (string_starting_character == '[') state = .start; | ||
| 105 | buf[pos] = c; | ||
| 106 | pos += 1; | ||
| 107 | }, | ||
| 108 | '`' => { | ||
| 109 | if (string_starting_character == '`') state = .start; | ||
| 89 | buf[pos] = c; | 110 | buf[pos] = c; |
| 90 | pos += 1; | 111 | pos += 1; |
| 91 | }, | 112 | }, |