diff options
author | ee7 <45465154+ee7@users.noreply.github.com> | 2022-08-19 21:40:53 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-08-19 15:40:53 -0400 |
commit | e8657c7107761fae7a8b5559df3b88165c238a12 (patch) | |
tree | ba65f39bf4fd3dd14fb9f695d4d6c01aa9c37ae2 /lib/impure/db_postgres.nim | |
parent | 7fe6dedb623b9bc781df9e68b53e354c73034090 (diff) | |
download | Nim-e8657c7107761fae7a8b5559df3b88165c238a12.tar.gz |
make implicit cstring conversions explicit (#19488)
The Nim manual says that an implicit conversion to cstring will eventually not be allowed [1]: A Nim `string` is implicitly convertible to `cstring` for convenience. [...] Even though the conversion is implicit, it is not *safe*: The garbage collector does not consider a `cstring` to be a root and may collect the underlying memory. For this reason, the implicit conversion will be removed in future releases of the Nim compiler. Certain idioms like conversion of a `const` string to `cstring` are safe and will remain to be allowed. And from Nim 1.6.0, such a conversion triggers a warning [2]: A dangerous implicit conversion to `cstring` now triggers a `[CStringConv]` warning. This warning will become an error in future versions! Use an explicit conversion like `cstring(x)` in order to silence the warning. However, some files in this repo produced such a warning. For example, before this commit, compiling `parsejson.nim` would produce: /foo/Nim/lib/pure/parsejson.nim(221, 37) Warning: implicit conversion to 'cstring' from a non-const location: my.buf; this will become a compile time error in the future [CStringConv] /foo/Nim/lib/pure/parsejson.nim(231, 39) Warning: implicit conversion to 'cstring' from a non-const location: my.buf; this will become a compile time error in the future [CStringConv] This commit resolves the most visible `CStringConv` warnings, making the cstring conversions explicit. [1] https://github.com/nim-lang/Nim/blob/d2318d9ccfe6/doc/manual.md#cstring-type [2] https://github.com/nim-lang/Nim/blob/d2318d9ccfe6/changelogs/changelog_1_6_0.md#type-system
Diffstat (limited to 'lib/impure/db_postgres.nim')
-rw-r--r-- | lib/impure/db_postgres.nim | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/lib/impure/db_postgres.nim b/lib/impure/db_postgres.nim index 36e035d3d..82403ab00 100644 --- a/lib/impure/db_postgres.nim +++ b/lib/impure/db_postgres.nim @@ -133,7 +133,7 @@ proc dbFormat(formatstr: SqlQuery, args: varargs[string]): string = proc tryExec*(db: DbConn, query: SqlQuery, args: varargs[string, `$`]): bool {.tags: [ReadDbEffect, WriteDbEffect].} = ## tries to execute the query and returns true if successful, false otherwise. - var res = pqexecParams(db, dbFormat(query, args), 0, nil, nil, + var res = pqexecParams(db, dbFormat(query, args).cstring, 0, nil, nil, nil, nil, 0) result = pqresultStatus(res) == PGRES_COMMAND_OK pqclear(res) @@ -143,7 +143,7 @@ proc tryExec*(db: DbConn, stmtName: SqlPrepared, ReadDbEffect, WriteDbEffect].} = ## tries to execute the query and returns true if successful, false otherwise. var arr = allocCStringArray(args) - var res = pqexecPrepared(db, stmtName.string, int32(args.len), arr, + var res = pqexecPrepared(db, stmtName.cstring, int32(args.len), arr, nil, nil, 0) deallocCStringArray(arr) result = pqresultStatus(res) == PGRES_COMMAND_OK @@ -152,7 +152,7 @@ proc tryExec*(db: DbConn, stmtName: SqlPrepared, proc exec*(db: DbConn, query: SqlQuery, args: varargs[string, `$`]) {. tags: [ReadDbEffect, WriteDbEffect].} = ## executes the query and raises EDB if not successful. - var res = pqexecParams(db, dbFormat(query, args), 0, nil, nil, + var res = pqexecParams(db, dbFormat(query, args).cstring, 0, nil, nil, nil, nil, 0) if pqresultStatus(res) != PGRES_COMMAND_OK: dbError(db) pqclear(res) @@ -160,7 +160,7 @@ proc exec*(db: DbConn, query: SqlQuery, args: varargs[string, `$`]) {. proc exec*(db: DbConn, stmtName: SqlPrepared, args: varargs[string]) {.tags: [ReadDbEffect, WriteDbEffect].} = var arr = allocCStringArray(args) - var res = pqexecPrepared(db, stmtName.string, int32(args.len), arr, + var res = pqexecPrepared(db, stmtName.cstring, int32(args.len), arr, nil, nil, 0) deallocCStringArray(arr) if pqResultStatus(res) != PGRES_COMMAND_OK: dbError(db) @@ -172,20 +172,20 @@ proc newRow(L: int): Row = proc setupQuery(db: DbConn, query: SqlQuery, args: varargs[string]): PPGresult = - result = pqexec(db, dbFormat(query, args)) + result = pqexec(db, dbFormat(query, args).cstring) if pqResultStatus(result) != PGRES_TUPLES_OK: dbError(db) proc setupQuery(db: DbConn, stmtName: SqlPrepared, args: varargs[string]): PPGresult = var arr = allocCStringArray(args) - result = pqexecPrepared(db, stmtName.string, int32(args.len), arr, + result = pqexecPrepared(db, stmtName.cstring, int32(args.len), arr, nil, nil, 0) deallocCStringArray(arr) if pqResultStatus(result) != PGRES_TUPLES_OK: dbError(db) proc setupSingeRowQuery(db: DbConn, query: SqlQuery, args: varargs[string]) = - if pqsendquery(db, dbFormat(query, args)) != 1: + if pqsendquery(db, dbFormat(query, args).cstring) != 1: dbError(db) if pqSetSingleRowMode(db) != 1: dbError(db) @@ -193,7 +193,7 @@ proc setupSingeRowQuery(db: DbConn, query: SqlQuery, proc setupSingeRowQuery(db: DbConn, stmtName: SqlPrepared, args: varargs[string]) = var arr = allocCStringArray(args) - if pqsendqueryprepared(db, stmtName.string, int32(args.len), arr, nil, nil, 0) != 1: + if pqsendqueryprepared(db, stmtName.cstring, int32(args.len), arr, nil, nil, 0) != 1: dbError(db) if pqSetSingleRowMode(db) != 1: dbError(db) @@ -205,7 +205,7 @@ proc prepare*(db: DbConn; stmtName: string, query: SqlQuery; ## via `$1`, `$2`, `$3`, etc. if nParams > 0 and not string(query).contains("$1"): dbError("parameter substitution expects \"$1\"") - var res = pqprepare(db, stmtName, query.string, int32(nParams), nil) + var res = pqprepare(db, stmtName, query.cstring, int32(nParams), nil) if pqResultStatus(res) != PGRES_COMMAND_OK: dbError(db) return SqlPrepared(stmtName) @@ -590,7 +590,7 @@ proc execAffectedRows*(db: DbConn, query: SqlQuery, ## executes the query (typically "UPDATE") and returns the ## number of affected rows. var q = dbFormat(query, args) - var res = pqExec(db, q) + var res = pqExec(db, q.cstring) if pqresultStatus(res) != PGRES_COMMAND_OK: dbError(db) result = parseBiggestInt($pqcmdTuples(res)) pqclear(res) @@ -601,7 +601,7 @@ proc execAffectedRows*(db: DbConn, stmtName: SqlPrepared, ## executes the query (typically "UPDATE") and returns the ## number of affected rows. var arr = allocCStringArray(args) - var res = pqexecPrepared(db, stmtName.string, int32(args.len), arr, + var res = pqexecPrepared(db, stmtName.cstring, int32(args.len), arr, nil, nil, 0) deallocCStringArray(arr) if pqresultStatus(res) != PGRES_COMMAND_OK: dbError(db) @@ -634,7 +634,7 @@ proc open*(connection, user, password, database: string): DbConn {. else: substr(connection, 0, colonPos-1) port = if colonPos < 0: "" else: substr(connection, colonPos+1) - result = pqsetdbLogin(host, port, nil, nil, database, user, password) + result = pqsetdbLogin(host.cstring, port.cstring, nil, nil, database, user, password) if pqStatus(result) != CONNECTION_OK: dbError(result) # result = nil proc setEncoding*(connection: DbConn, encoding: string): bool {. |