mirror of
https://github.com/nim-lang/Nim.git
synced 2026-02-25 12:25:08 +00:00
move database encoding options to setEncoding(), leave open() as it is
This commit is contained in:
@@ -212,8 +212,8 @@ proc close*(db: TDbConn) {.tags: [FDb].} =
|
||||
## closes the database connection.
|
||||
if db != nil: mysql.close(db)
|
||||
|
||||
proc open*(connection, user, password, database: string,
|
||||
charset: string = "utf8"): TDbConn {.tags: [FDb].} =
|
||||
proc open*(connection, user, password, database: string): TDbConn {.
|
||||
tags: [FDb].} =
|
||||
## opens a database connection. Raises `EDb` if the connection could not
|
||||
## be established.
|
||||
result = mysql.init(nil)
|
||||
@@ -229,7 +229,9 @@ proc open*(connection, user, password, database: string,
|
||||
var errmsg = $mysql.error(result)
|
||||
db_mysql.close(result)
|
||||
dbError(errmsg)
|
||||
if mysql.set_character_set(result, charset) == 0:
|
||||
var errmsg = $mysql.error(result)
|
||||
db_mysql.close(result)
|
||||
dbError(errmsg)
|
||||
|
||||
proc setEncoding*(connection: TDbConn, encoding: string): bool {.
|
||||
tags: [FDb].} =
|
||||
## sets the encoding of a database connection, returns true for
|
||||
## success, false for failure.
|
||||
result = mysql.set_character_set(connection, encoding) == 0
|
||||
@@ -239,8 +239,8 @@ proc close*(db: TDbConn) {.tags: [FDb].} =
|
||||
## closes the database connection.
|
||||
if db != nil: pqfinish(db)
|
||||
|
||||
proc open*(connection, user, password, database: string,
|
||||
charset: string = "UTF-8"): TDbConn {.tags: [FDb].} =
|
||||
proc open*(connection, user, password, database: string): TDbConn {.
|
||||
tags: [FDb].} =
|
||||
## opens a database connection. Raises `EDb` if the connection could not
|
||||
## be established.
|
||||
##
|
||||
@@ -260,4 +260,9 @@ proc open*(connection, user, password, database: string,
|
||||
## the nim db api.
|
||||
result = pqsetdbLogin(nil, nil, nil, nil, database, user, password)
|
||||
if pqStatus(result) != CONNECTION_OK: dbError(result) # result = nil
|
||||
if pqsetClientEncoding(result, charset) != 0: dbError(result)
|
||||
|
||||
proc setEncoding*(connection: TDbConn, encoding: string): bool {.
|
||||
tags: [FDb].} =
|
||||
## sets the encoding of a database connection, returns true for
|
||||
## success, false for failure.
|
||||
return pqsetClientEncoding(connection, encoding) == 0
|
||||
@@ -183,17 +183,28 @@ proc close*(db: TDbConn) {.tags: [FDb].} =
|
||||
## closes the database connection.
|
||||
if sqlite3.close(db) != SQLITE_OK: dbError(db)
|
||||
|
||||
proc open*(connection, user, password, database: string,
|
||||
charset: string = "UTF-8"): TDbConn {.tags: [FDb].} =
|
||||
proc open*(connection, user, password, database: string): TDbConn {.
|
||||
tags: [FDb].} =
|
||||
## opens a database connection. Raises `EDb` if the connection could not
|
||||
## be established. Only the ``connection`` parameter is used for ``sqlite``.
|
||||
var db: TDbConn
|
||||
if sqlite3.open(connection, db) == SQLITE_OK:
|
||||
result = db
|
||||
exec(result, sql"PRAGMA encoding = ?", [charset])
|
||||
else:
|
||||
dbError(db)
|
||||
|
||||
|
||||
proc setEncoding*(connection: TDbConn, encoding: string): bool {.
|
||||
tags: [FDb].} =
|
||||
## sets the encoding of a database connection, returns true for
|
||||
## success, false for failure.
|
||||
##
|
||||
## Note that the encoding cannot be changed once it's been set.
|
||||
## According to SQLite3 documentation, any attempt to change
|
||||
## the encoding after the database is created will be silently
|
||||
## ignored.
|
||||
exec(connection, sql"PRAGMA encoding = ?", [encoding])
|
||||
result = connection.getValue(sql"PRAGMA encoding") == encoding
|
||||
|
||||
when isMainModule:
|
||||
var db = open("db.sql", "", "", "")
|
||||
exec(db, sql"create table tbl1(one varchar(10), two smallint)", [])
|
||||
|
||||
Reference in New Issue
Block a user