65 if (
Regex::test(__createDatabasePattern__, _connString,
true)) {
67 if(isc_dsql_execute_immediate(
85 ListedByteStringToByteStringMap map;
86 Connection::splitConnectionString(_connString, _connlen, map);
88 ByteString strServer = map[
"SERVER"];
89 ByteString strDatabase = map[
"DATABASE"];
90 ByteString strUser = map[
"USER"];
91 ByteString strPassword = map[
"PASSWORD"];
92 ByteString strSqlDialect = map[
"SQL_DIALECT"];
94 if (!strSqlDialect.isEmpty()) {
95 int nDialect = SQL_DIALECT_CURRENT;
97 long n = strtol(strSqlDialect, &endptr, 10);
98 if (
n == LONG_MAX ||
n == LONG_MIN
99 ||
n < INT_MIN || INT_MAX <
n
108 if (!(nDialect == SQL_DIALECT_V5
109 || nDialect == SQL_DIALECT_V6_TRANSITION
110 || nDialect == SQL_DIALECT_V6)) {
115 __dialect = nDialect;
118 if ((strUser.length() > 127) || (strPassword.length() > 127)) {
124 ByteString strDatabaseEnv;
125 if (!strServer.isEmpty())
126 strDatabaseEnv = strServer +
":";
128 if (!strDatabase.isEmpty())
129 strDatabaseEnv = strDatabaseEnv + strDatabase;
131 if (strDatabaseEnv.isEmpty()) {
137 ByteStringBuilder dpb;
138 dpb = (char)isc_dpb_version1;
139 dpb += (char)isc_dpb_user_name;
140 dpb += (char)strUser.length();
142 dpb += (char)isc_dpb_password;
143 dpb += (char)strPassword.length();
146 static const char __UTF8__[] =
"UTF8";
147 dpb += (char)isc_dpb_lc_ctype;
148 dpb += (char)(
sizeof(__UTF8__) - 1);
151#if defined(FIREBIRD_IBASE_H) && FB_API_VER >= 40
152 static const char __SET_BIND__[] =
153 "DECFLOAT TO VARCHAR;"
155 "TIME ZONE TO EXTENDED";
156 dpb += (char)isc_dpb_set_bind;
157 dpb += (char)(
sizeof(__SET_BIND__) - 1);
161#ifdef FIREBIRD_IBASE_H
166 if (isc_attach_database(
168 (
short) strDatabaseEnv.length(),
169 (
_CONST char*) strDatabaseEnv.data(),
171 (
short) dpb.length(),
172 (
_CONST char*) dpb.data())
363 if (isc_database_info (
366 sizeof(database_info_items),
374 ByteString strVersion;
380 unsigned short length;
382 while(*p != isc_info_end) {
384 length = (
unsigned short)isc_vax_integer(p, 2);
386 if (item == isc_info_version) {
389 strVersion.assign(p, 2, p[1]);
391 else if (item == isc_info_db_id) {
396 unsigned short nStrLen = *t++;
397 strDb.assign(t, nStrLen);
400 strSite.assign(t, nStrLen);
409 ByteString strInfo =
"InterBase " + strVersion +
" \"" + strSite +
':' + strDb +
"\"";
410 if (strInfo.length() < *_buflen)
411 *_buflen = strInfo.length();
413 strncpy(_buf, strInfo.data(), *_buflen);