Skip to content

Commit 0e42c4e

Browse files
authored
Merge pull request #5 from bung87/refactor4
rename `updateWhere` to `sqlWhere` , refactor `delete`'s `where` clause
2 parents a9073f2 + f3d9d70 commit 0e42c4e

File tree

4 files changed

+78
-63
lines changed

4 files changed

+78
-63
lines changed

src/sqlbuilderpkg/delete.nim

Lines changed: 9 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -19,38 +19,26 @@ proc sqlDelete*(table: string, where: varargs[string]): SqlQuery =
1919
## Does NOT check for NULL values
2020

2121
var res = "DELETE FROM " & table
22-
var wes = " WHERE "
23-
for i, d in where:
24-
if i > 0:
25-
wes.add(" AND ")
26-
wes.add(formatWhereParams(d))
27-
result = sql(res & wes)
22+
if where.len > 0:
23+
res.add sqlWhere(where)
24+
result = sql(res)
2825

2926

3027
proc sqlDelete*(table: string, where: varargs[string], args: ArgsContainer.query): SqlQuery =
3128
## SQL builder for DELETE queries
3229
## Checks for NULL values
3330

3431
var res = "DELETE FROM " & table
35-
var wes = " WHERE "
36-
for i, d in where:
37-
if i > 0:
38-
wes.add(" AND ")
39-
if args[i].isNull:
40-
wes.add(d & " = NULL")
41-
else:
42-
wes.add(d & " = ?")
43-
result = sql(res & wes)
32+
if where.len > 0:
33+
res.add(sqlWhere(where))
34+
result = sql(res)
4435

4536

4637
macro sqlDeleteMacro*(table: string, where: varargs[string]): SqlQuery =
4738
## SQL builder for SELECT queries
4839
## Does NOT check for NULL values
4940

5041
var res = "DELETE FROM " & $table
51-
var wes = " WHERE "
52-
for i, d in where:
53-
if i > 0:
54-
wes.add(" AND ")
55-
wes.add(formatWhereParams($d))
56-
result = parseStmt("sql(\"" & res & wes & "\")")
42+
if where.len > 0:
43+
res.add sqlWhere(where)
44+
result = parseStmt("sql(\"" & res & "\")")

src/sqlbuilderpkg/update.nim

Lines changed: 6 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -72,22 +72,6 @@ proc updateArray(arrayType: string, arrayAppend: varargs[string]): string =
7272
return result
7373

7474

75-
proc updateWhere(where: varargs[string]): string =
76-
## Update the WHERE part of the query.
77-
##
78-
## => ["name", "age = "]
79-
## => `WHERE name = ?, age = ?`
80-
##
81-
## => ["name = ", "age >"]
82-
## => `WHERE name = ?, age > ?`
83-
var wes = " WHERE "
84-
for i, v in where:
85-
if i > 0:
86-
wes.add(" AND ")
87-
wes.add(formatWhereParams(v))
88-
return wes
89-
90-
9175
proc sqlUpdate*(table: string, data: varargs[string], where: varargs[string], args: ArgsContainer.query): SqlQuery =
9276
## SQL builder for UPDATE queries
9377
## Checks for NULL values
@@ -130,7 +114,7 @@ proc sqlUpdate*(
130114
## where => ["id = ", "name IS NULL"]
131115
var fields: string
132116
fields.add(updateSet(data))
133-
fields.add(updateWhere(where))
117+
fields.add(sqlWhere(where))
134118
result = sql("UPDATE " & table & " SET " & fields)
135119

136120

@@ -142,7 +126,7 @@ proc sqlUpdateArrayRemove*(
142126
## ARRAY_REMOVE
143127
var fields: string
144128
fields.add(updateArray("ARRAY_REMOVE", arrayRemove))
145-
fields.add(updateWhere(where))
129+
fields.add(sqlWhere(where))
146130
result = sql("UPDATE " & table & " SET " & fields)
147131

148132

@@ -154,7 +138,7 @@ proc sqlUpdateArrayAppend*(
154138
## ARRAY_APPEND
155139
var fields: string
156140
fields.add(updateArray("ARRAY_APPEND", arrayAppend))
157-
fields.add(updateWhere(where))
141+
fields.add(sqlWhere(where))
158142
result = sql("UPDATE " & table & " SET " & fields)
159143

160144

@@ -179,26 +163,6 @@ proc updateSet(data: NimNode): string =
179163
return result
180164

181165

182-
183-
proc updateWhere(where: NimNode): string =
184-
## Update the WHERE part of the query.
185-
##
186-
## => ["name", "age = "]
187-
## => `WHERE name = ?, age = ?`
188-
##
189-
## => ["name = ", "age >"]
190-
## => `WHERE name = ?, age > ?`
191-
var wes = " WHERE "
192-
for i, v in where:
193-
# Convert NimNode to string
194-
let d = $v
195-
if i > 0:
196-
wes.add(" AND ")
197-
wes.add(formatWhereParams(d))
198-
return wes
199-
200-
201-
202166
macro sqlUpdateMacro*(
203167
table: string,
204168
data: varargs[string],
@@ -212,7 +176,7 @@ macro sqlUpdateMacro*(
212176
## where => ["id = ", "name IS NULL"]
213177
var fields: string
214178
fields.add(updateSet(data))
215-
fields.add(updateWhere(where))
179+
fields.add(sqlWhere(where))
216180
result = parseStmt("sql(\"" & "UPDATE " & $table & " SET " & fields & "\")")
217181

218182

@@ -243,7 +207,7 @@ macro sqlUpdateMacroArrayRemove*(
243207
## ARRAY_REMOVE macro
244208
var fields: string
245209
fields.add(updateArray("ARRAY_REMOVE", arrayRemove))
246-
fields.add(updateWhere(where))
210+
fields.add(sqlWhere(where))
247211
result = parseStmt("sql(\"" & "UPDATE " & $table & " SET " & fields & "\")")
248212

249213

@@ -255,5 +219,5 @@ macro sqlUpdateMacroArrayAppend*(
255219
## ARRAY_APPEND macro
256220
var fields: string
257221
fields.add(updateArray("ARRAY_APPEND", arrayAppend))
258-
fields.add(updateWhere(where))
222+
fields.add(sqlWhere(where))
259223
result = parseStmt("sql(\"" & "UPDATE " & $table & " SET " & fields & "\")")

src/sqlbuilderpkg/utils_private.nim

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ else:
77

88

99
import
10+
std/macros,
1011
std/strutils
1112

1213

@@ -139,3 +140,34 @@ proc hasIllegalFormats*(query: string): string =
139140
if "??" in noSpaces:
140141
return "double insert detected. (??)"
141142

143+
proc sqlWhere*(where: varargs[string]): string =
144+
## the WHERE part of the query.
145+
##
146+
## => ["name", "age = "]
147+
## => `WHERE name = ?, age = ?`
148+
##
149+
## => ["name = ", "age >"]
150+
## => `WHERE name = ?, age > ?`
151+
var wes = " WHERE "
152+
for i, v in where:
153+
if i > 0:
154+
wes.add(" AND ")
155+
wes.add(formatWhereParams(v))
156+
return wes
157+
158+
proc sqlWhere*(where: NimNode): string =
159+
## the WHERE part of the query.
160+
##
161+
## => ["name", "age = "]
162+
## => `WHERE name = ?, age = ?`
163+
##
164+
## => ["name = ", "age >"]
165+
## => `WHERE name = ?, age > ?`
166+
var wes = " WHERE "
167+
for i, v in where:
168+
# Convert NimNode to string
169+
let d = $v
170+
if i > 0:
171+
wes.add(" AND ")
172+
wes.add(formatWhereParams(d))
173+
return wes

tests/delete/test_delete.nim

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@ suite "delete - normal":
2424
test = sqlDelete("my-table", ["name", "age"])
2525
check querycompare(test, sql("DELETE FROM my-table WHERE name = ? AND age = ?"))
2626

27+
test = sqlDelete("my-table", [])
28+
check querycompare(test, sql("DELETE FROM my-table"))
29+
2730

2831
test "sqlDeleteWhere":
2932
var test: SqlQuery
@@ -64,4 +67,32 @@ suite "delete - macro":
6467
check querycompare(test, sql("DELETE FROM my-table WHERE name IS NULL AND age = ?"))
6568

6669

70+
suite "delete - genArgs":
71+
72+
test "sqlDelete with genArgs":
73+
74+
var a = genArgs("123", dbNullVal)
75+
76+
var test = sqlDelete("tasksQQ", ["id =", "status IS"], a.query)
77+
78+
check querycompare(test, sql("""DELETE FROM tasksQQ WHERE id = ? AND status IS ?"""))
79+
80+
81+
82+
a = genArgs("123", dbNullVal, dbNullVal)
83+
84+
test = sqlDelete("tasksQQ", ["id =", "status IS NOT", "phase IS"], a.query)
85+
86+
check querycompare(test, sql("""DELETE FROM tasksQQ WHERE id = ? AND status IS NOT ? AND phase IS ?"""))
87+
88+
89+
90+
test "sqlDelete with genArgsSetNull":
91+
92+
var a = genArgsSetNull("123", "", "")
93+
94+
var test = sqlDelete("tasksQQ", ["id =", "status IS NOT", "phase IS"], a.query)
95+
96+
check querycompare(test, sql("""DELETE FROM tasksQQ WHERE id = ? AND status IS NOT ? AND phase IS ?"""))
97+
6798

0 commit comments

Comments
 (0)