@@ -63,12 +63,12 @@ proc injectDbArguments(procbody: var NimNode, body, st_ident: NimNode): seq[tupl
63
63
)
64
64
)
65
65
)
66
- procbody.add nnkCall.newTree(
67
- nnkDotExpr.newTree(
68
- st_ident,
69
- bindSym " reset"
70
- )
71
- )
66
+ # procbody.add nnkCall.newTree(
67
+ # nnkDotExpr.newTree(
68
+ # st_ident,
69
+ # bindSym "reset"
70
+ # )
71
+ # )
72
72
for it in result :
73
73
procbody.add nnkAsgn.newTree(
74
74
nnkBracketExpr.newTree(
@@ -116,10 +116,18 @@ proc genQueryIterator(sql: string, body: NimNode): NimNode =
116
116
result [6 ] = nnkStmtList.genTree(procbody):
117
117
injectDbFetch(procbody, sql, db_ident, st_ident)
118
118
discard injectDbArguments(procbody, body, st_ident)
119
- procbody.addTree(nnkWhileStmt, whilebody):
120
- whilebody.add nnkCall.newTree(nnkDotExpr.newTree(st_ident, bindSym " step" ))
121
- whilebody.addTree(nnkYieldStmt, yieldbody):
122
- yieldbody.add fillPar(rettype, st_ident)
119
+ procbody.addTree(nnkTryStmt, trybody):
120
+ trybody.addTree(nnkWhileStmt, whilebody):
121
+ whilebody.add nnkCall.newTree(nnkDotExpr.newTree(st_ident, bindSym " step" ))
122
+ whilebody.addTree(nnkYieldStmt, yieldbody):
123
+ yieldbody.add fillPar(rettype, st_ident)
124
+ trybody.addTree(nnkFinally, finallybody):
125
+ finallybody.add nnkCall.newTree(
126
+ nnkDotExpr.newTree(
127
+ st_ident,
128
+ bindSym " reset"
129
+ )
130
+ )
123
131
124
132
proc genQueryProcedure(sql: string , body, tupdef: NimNode, opt: static bool ): NimNode =
125
133
result = body.copy()
@@ -133,32 +141,40 @@ proc genQueryProcedure(sql: string, body, tupdef: NimNode, opt: static bool): Ni
133
141
result [6 ] = nnkStmtList.genTree(procbody):
134
142
injectDbFetch(procbody, sql, db_ident, st_ident)
135
143
discard injectDbArguments(procbody, body, st_ident)
136
- procbody.addTree(nnkIfStmt, ifbody):
137
- ifbody.addTree(nnkElifBranch, branch):
138
- branch.add nnkCall.newTree(nnkDotExpr.newTree(st_ident, bindSym " step" ))
139
- branch.addTree(nnkStmtList, resultstmt):
140
- resultstmt.addTree(nnkAsgn, retbody):
141
- retbody.add ident " result"
142
- let tmp = fillPar(rettype, st_ident)
143
- when opt:
144
- retbody.add nnkCommand.newTree(bindSym " some" , tmp)
145
- else :
146
- retbody.add tmp
147
- resultstmt.addTree(nnkIfStmt, ifbody2):
148
- ifbody2.addTree(nnkElifBranch, dup_branch):
149
- dup_branch.add nnkCall.newTree(nnkDotExpr.newTree(st_ident, bindSym " step" ))
150
- dup_branch.add nnkRaiseStmt.newTree(
151
- nnkCall.newTree(bindSym " newException" , ident " SQLiteError" , newLit " Too many results" )
152
- )
153
- ifbody.addTree(nnkElse, elsebody):
154
- when opt:
155
- elsebody.add nnkReturnStmt.newTree(
156
- nnkCommand.newTree(bindSym " none" , rettype)
157
- )
158
- else :
159
- elsebody.add nnkRaiseStmt.newTree(
160
- nnkCall.newTree(bindSym " newException" , ident " SQLiteError" , newLit " No results" )
144
+ procbody.addTree(nnkTryStmt, trybody):
145
+ trybody.addTree(nnkIfStmt, ifbody):
146
+ ifbody.addTree(nnkElifBranch, branch):
147
+ branch.add nnkCall.newTree(nnkDotExpr.newTree(st_ident, bindSym " step" ))
148
+ branch.addTree(nnkStmtList, resultstmt):
149
+ resultstmt.addTree(nnkAsgn, retbody):
150
+ retbody.add ident " result"
151
+ let tmp = fillPar(rettype, st_ident)
152
+ when opt:
153
+ retbody.add nnkCommand.newTree(bindSym " some" , tmp)
154
+ else :
155
+ retbody.add tmp
156
+ resultstmt.addTree(nnkIfStmt, ifbody2):
157
+ ifbody2.addTree(nnkElifBranch, dup_branch):
158
+ dup_branch.add nnkCall.newTree(nnkDotExpr.newTree(st_ident, bindSym " step" ))
159
+ dup_branch.add nnkRaiseStmt.newTree(
160
+ nnkCall.newTree(bindSym " newException" , ident " SQLiteError" , newLit " Too many results" )
161
+ )
162
+ ifbody.addTree(nnkElse, elsebody):
163
+ when opt:
164
+ elsebody.add nnkReturnStmt.newTree(
165
+ nnkCommand.newTree(bindSym " none" , rettype)
166
+ )
167
+ else :
168
+ elsebody.add nnkRaiseStmt.newTree(
169
+ nnkCall.newTree(bindSym " newException" , ident " SQLiteError" , newLit " No results" )
170
+ )
171
+ trybody.addTree(nnkFinally, finallybody):
172
+ finallybody.add nnkCall.newTree(
173
+ nnkDotExpr.newTree(
174
+ st_ident,
175
+ bindSym " reset"
161
176
)
177
+ )
162
178
163
179
proc genUpdateProcedure(sql: string , body: NimNode): NimNode =
164
180
result = body.copy()
@@ -168,15 +184,23 @@ proc genUpdateProcedure(sql: string, body: NimNode): NimNode =
168
184
result [6 ] = nnkStmtList.genTree(procbody):
169
185
injectDbFetch(procbody, sql, db_ident, st_ident)
170
186
discard injectDbArguments(procbody, body, st_ident)
171
- procbody.addTree(nnkIfStmt, ifbody):
172
- ifbody.addTree(nnkElifBranch, branch):
173
- branch.add nnkCall.newTree(nnkDotExpr.newTree(st_ident, bindSym " step" ))
174
- branch.add nnkRaiseStmt.newTree(
175
- nnkCall.newTree(bindSym " newException" , ident " SQLiteError" , newLit " Invalid update" )
176
- )
177
- ifbody.addTree(nnkElse, elsebody):
178
- elsebody.add nnkReturnStmt.newTree(
179
- nnkCall.newTree(nnkDotExpr.newTree(db_ident, bindSym " lastInsertRowid" ))
187
+ procbody.addTree(nnkTryStmt, trybody):
188
+ trybody.addTree(nnkIfStmt, ifbody):
189
+ ifbody.addTree(nnkElifBranch, branch):
190
+ branch.add nnkCall.newTree(nnkDotExpr.newTree(st_ident, bindSym " step" ))
191
+ branch.add nnkRaiseStmt.newTree(
192
+ nnkCall.newTree(bindSym " newException" , ident " SQLiteError" , newLit " Invalid update" )
193
+ )
194
+ ifbody.addTree(nnkElse, elsebody):
195
+ elsebody.add nnkReturnStmt.newTree(
196
+ nnkCall.newTree(nnkDotExpr.newTree(db_ident, bindSym " lastInsertRowid" ))
197
+ )
198
+ trybody.addTree(nnkFinally, finallybody):
199
+ finallybody.add nnkCall.newTree(
200
+ nnkDotExpr.newTree(
201
+ st_ident,
202
+ bindSym " reset"
203
+ )
180
204
)
181
205
182
206
proc genCreateProcedure(sql: string , body: NimNode): NimNode =
@@ -187,11 +211,19 @@ proc genCreateProcedure(sql: string, body: NimNode): NimNode =
187
211
result [6 ] = nnkStmtList.genTree(procbody):
188
212
injectDbFetch(procbody, sql, db_ident, st_ident)
189
213
discard injectDbArguments(procbody, body, st_ident)
190
- procbody.addTree(nnkIfStmt, ifbody):
191
- ifbody.addTree(nnkElifBranch, branch):
192
- branch.add nnkCall.newTree(nnkDotExpr.newTree(st_ident, bindSym " step" ))
193
- branch.add nnkRaiseStmt.newTree(
194
- nnkCall.newTree(bindSym " newException" , ident " SQLiteError" , newLit " Invalid statement" )
214
+ procbody.addTree(nnkTryStmt, trybody):
215
+ trybody.addTree(nnkIfStmt, ifbody):
216
+ ifbody.addTree(nnkElifBranch, branch):
217
+ branch.add nnkCall.newTree(nnkDotExpr.newTree(st_ident, bindSym " step" ))
218
+ branch.add nnkRaiseStmt.newTree(
219
+ nnkCall.newTree(bindSym " newException" , ident " SQLiteError" , newLit " Invalid statement" )
220
+ )
221
+ trybody.addTree(nnkFinally, finallybody):
222
+ finallybody.add nnkCall.newTree(
223
+ nnkDotExpr.newTree(
224
+ st_ident,
225
+ bindSym " reset"
226
+ )
195
227
)
196
228
197
229
macro importdb* (sql: static string , body: typed ) =
0 commit comments