bugfixes for the high-level postgreSQL wrapper
This commit is contained in:
parent
5eea125ba7
commit
ecb5a8db99
8 changed files with 29 additions and 49 deletions
0
lib/devel/httpclient.nim
Normal file → Executable file
0
lib/devel/httpclient.nim
Normal file → Executable file
0
lib/devel/parseurl.nim
Normal file → Executable file
0
lib/devel/parseurl.nim
Normal file → Executable file
|
|
@ -21,7 +21,7 @@ proc dbError(db: TDbConn) {.noreturn.} =
|
|||
## raises an EDb exception.
|
||||
var e: ref EDb
|
||||
new(e)
|
||||
e.msg = PQerrorMessage(db)
|
||||
e.msg = $PQerrorMessage(db)
|
||||
raise e
|
||||
|
||||
proc dbError*(msg: string) {.noreturn.} =
|
||||
|
|
@ -31,17 +31,9 @@ proc dbError*(msg: string) {.noreturn.} =
|
|||
e.msg = msg
|
||||
raise e
|
||||
|
||||
when false:
|
||||
proc dbQueryOpt*(db: TDbConn, query: string, args: openarray[string]) =
|
||||
var stmt = mysql_stmt_init(db)
|
||||
if stmt == nil: dbError(db)
|
||||
if mysql_stmt_prepare(stmt, query, len(query)) != 0:
|
||||
dbError(db)
|
||||
var
|
||||
bindings: seq[MYSQL_BIND]
|
||||
discard mysql_stmt_close(stmt)
|
||||
|
||||
proc dbQuote(s: string): string =
|
||||
#if s.len > 0 and allCharsInSet(s, {'0'..'9'}): result = s
|
||||
#else:
|
||||
result = "'"
|
||||
for c in items(s):
|
||||
if c == '\'': add(result, "''")
|
||||
|
|
@ -86,7 +78,8 @@ proc setupQuery(db: TDbConn, query: TSqlQuery,
|
|||
proc setRow(res: PPGresult, r: var TRow, line, cols: int) =
|
||||
for col in 0..cols-1:
|
||||
setLen(r[col], 0)
|
||||
add(r[col], PQgetvalue(res, line, cols))
|
||||
var x = PQgetvalue(res, line, col)
|
||||
add(r[col], x)
|
||||
|
||||
iterator dbFastRows*(db: TDbConn, query: TSqlQuery,
|
||||
args: openarray[string]): TRow =
|
||||
|
|
@ -118,10 +111,8 @@ proc dbGetValue*(db: TDbConn, query: TSqlQuery,
|
|||
## executes the query and returns the result dataset's the first column
|
||||
## of the first row. Returns "" if the dataset contains no rows. This uses
|
||||
## `dbFastRows`, so it inherits its fragile behaviour.
|
||||
result = ""
|
||||
for row in dbFastRows(db, query, args):
|
||||
result = row[0]
|
||||
break
|
||||
var x = PQgetvalue(setupQuery(db, query, args), 0, 0)
|
||||
result = if isNil(x): "" else: $x
|
||||
|
||||
proc dbTryInsertID*(db: TDbConn, query: TSqlQuery,
|
||||
args: openarray[string]): int64 =
|
||||
|
|
@ -134,11 +125,6 @@ proc dbTryInsertID*(db: TDbConn, query: TSqlQuery,
|
|||
result = ParseBiggestInt(val)
|
||||
else:
|
||||
result = -1
|
||||
#if mysqlRealQuery(db, q, q.len) != 0'i32:
|
||||
# result = -1'i64
|
||||
#else:
|
||||
# result = mysql_insert_id(db)
|
||||
#LAST_INSERT_ID()
|
||||
|
||||
proc dbInsertID*(db: TDbConn, query: TSqlQuery,
|
||||
args: openArray[string]): int64 =
|
||||
|
|
|
|||
|
|
@ -194,13 +194,15 @@ proc signalHandler(sig: cint) {.exportc: "signalHandler", noconv.} =
|
|||
rawWriteStackTrace(buf)
|
||||
|
||||
if s == SIGINT: add(buf, "SIGINT: Interrupted by Ctrl-C.\n")
|
||||
elif s == SIGSEGV: add(buf, "SIGSEGV: Illegal storage access.\n")
|
||||
elif s == SIGSEGV:
|
||||
add(buf, "SIGSEGV: Illegal storage access. (Attempt to read from nil?)\n")
|
||||
elif s == SIGABRT:
|
||||
if dbgAborting: return # the debugger wants to abort
|
||||
add(buf, "SIGABRT: Abnormal termination.\n")
|
||||
elif s == SIGFPE: add(buf, "SIGFPE: Arithmetic error.\n")
|
||||
elif s == SIGILL: add(buf, "SIGILL: Illegal operation.\n")
|
||||
elif s == SIGBUS: add(buf, "SIGBUS: Illegal storage access.\n")
|
||||
elif s == SIGBUS:
|
||||
add(buf, "SIGBUS: Illegal storage access. (Attempt to read from nil?)\n")
|
||||
else: add(buf, "unknown signal\n")
|
||||
writeToStdErr(buf)
|
||||
dbgAborting = True # play safe here...
|
||||
|
|
|
|||
|
|
@ -51,7 +51,6 @@ proc readLine(f: TFile): string =
|
|||
result = ""
|
||||
rawReadLine(f, result)
|
||||
|
||||
proc write(f: TFile, s: string) = fputs(s, f)
|
||||
proc write(f: TFile, i: int) =
|
||||
when sizeof(int) == 8:
|
||||
fprintf(f, "%lld", i)
|
||||
|
|
@ -167,6 +166,10 @@ proc writeChars(f: TFile, a: openarray[char], start, len: int): int =
|
|||
proc writeBuffer(f: TFile, buffer: pointer, len: int): int =
|
||||
result = fwrite(buffer, 1, len, f)
|
||||
|
||||
proc write(f: TFile, s: string) =
|
||||
if writeBuffer(f, cstring(s), s.len) != s.len:
|
||||
raise newException(EIO, "cannot write string to file")
|
||||
|
||||
proc setFilePos(f: TFile, pos: int64) =
|
||||
if fseek(f, clong(pos), 0) != 0:
|
||||
raise newException(EIO, "cannot set file position")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue