@@ -63,12 +63,12 @@ proc injectDbArguments(procbody: var NimNode, body, st_ident: NimNode): seq[tupl
6363 )
6464 )
6565 )
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+ # )
7272 for it in result :
7373 procbody.add nnkAsgn.newTree (
7474 nnkBracketExpr.newTree (
@@ -116,10 +116,18 @@ proc genQueryIterator(sql: string, body: NimNode): NimNode =
116116 result [6 ] = nnkStmtList.genTree (procbody):
117117 injectDbFetch (procbody, sql, db_ident, st_ident)
118118 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+ )
123131
124132proc genQueryProcedure (sql: string , body, tupdef: NimNode , opt: static bool ): NimNode =
125133 result = body.copy ()
@@ -133,32 +141,40 @@ proc genQueryProcedure(sql: string, body, tupdef: NimNode, opt: static bool): Ni
133141 result [6 ] = nnkStmtList.genTree (procbody):
134142 injectDbFetch (procbody, sql, db_ident, st_ident)
135143 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"
161176 )
177+ )
162178
163179proc genUpdateProcedure (sql: string , body: NimNode ): NimNode =
164180 result = body.copy ()
@@ -168,15 +184,23 @@ proc genUpdateProcedure(sql: string, body: NimNode): NimNode =
168184 result [6 ] = nnkStmtList.genTree (procbody):
169185 injectDbFetch (procbody, sql, db_ident, st_ident)
170186 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+ )
180204 )
181205
182206proc genCreateProcedure (sql: string , body: NimNode ): NimNode =
@@ -187,11 +211,19 @@ proc genCreateProcedure(sql: string, body: NimNode): NimNode =
187211 result [6 ] = nnkStmtList.genTree (procbody):
188212 injectDbFetch (procbody, sql, db_ident, st_ident)
189213 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+ )
195227 )
196228
197229macro importdb * (sql: static string , body: typed ) =
0 commit comments