Skip to content

Commit 0ca1303

Browse files
committed
support postgresql username and password in url: ?user=username,password=userpassword - issue buggins#27
1 parent 634ba41 commit 0ca1303

File tree

2 files changed

+26
-5
lines changed

2 files changed

+26
-5
lines changed

examples/pgsql_test/source/main.d

+4-3
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,10 @@ int main(string[] argv)
1010
version( USE_PGSQL )
1111
{
1212
PGSQLDriver driver = new PGSQLDriver();
13-
string url = PGSQLDriver.generateUrl( "/tmp", 5432, "ddbctestdb" );
14-
params["user"] = "ddbctest";
15-
params["password"] = "ddbctestpass";
13+
//string url = PGSQLDriver.generateUrl( "/tmp", 5432, "ddbctestdb" ) ~ "?user=ddbctest,password=ddbctestpass";
14+
string url = PGSQLDriver.generateUrl( "localhost", 5432, "ddbctestdb" ) ~ "?user=ddbctest,password=ddbctestpass";
15+
//params["user"] = "ddbctest";
16+
//params["password"] = "ddbctestpass";
1617
params["ssl"] = "true";
1718
}
1819
else version( USE_SQLITE )

source/ddbc/drivers/pgsqlddbc.d

+22-2
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,7 @@ version(USE_PGSQL) {
234234
PGconn * conn;
235235
bool closed;
236236
bool autocommit = true;
237+
bool useSsl = true;
237238
Mutex mutex;
238239

239240

@@ -284,6 +285,19 @@ version(USE_PGSQL) {
284285
urlParams = url[qmIndex + 1 .. $];
285286
url = url[0 .. qmIndex];
286287
// TODO: parse params
288+
string[] list = urlParams.split(",");
289+
foreach(item; list) {
290+
string[] keyValue = item.split("=");
291+
if (keyValue.length == 2) {
292+
if (keyValue[0] == "user")
293+
username = keyValue[1];
294+
else if (keyValue[0] == "password")
295+
password = keyValue[1];
296+
else if (keyValue[0] == "ssl") {
297+
useSsl = (keyValue[1] == "true");
298+
}
299+
}
300+
}
287301
}
288302
string dbName = "";
289303
ptrdiff_t firstSlashes = std.string.indexOf(url, "//");
@@ -305,10 +319,16 @@ version(USE_PGSQL) {
305319
if (port < 1 || port > 65535)
306320
port = 5432;
307321
}
308-
username = params["user"];
309-
password = params["password"];
322+
if ("user" in params)
323+
username = params["user"];
324+
if ("password" in params)
325+
password = params["password"];
326+
if ("ssl" in params)
327+
useSsl = (params["ssl"] == "true");
328+
310329

311330
//writeln("host " ~ hostname ~ " : " ~ to!string(port) ~ " db=" ~ dbName ~ " user=" ~ username ~ " pass=" ~ password);
331+
// TODO: support SSL param
312332

313333
const char ** keywords = [std.string.toStringz("host"), std.string.toStringz("port"), std.string.toStringz("dbname"), std.string.toStringz("user"), std.string.toStringz("password"), null].ptr;
314334
const char ** values = [std.string.toStringz(hostname), std.string.toStringz(to!string(port)), std.string.toStringz(dbName), std.string.toStringz(username), std.string.toStringz(password), null].ptr;

0 commit comments

Comments
 (0)