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 dpb += (char)isc_dpb_lc_ctype;
150 if (isc_attach_database(
152 strDatabaseEnv.length(),
153 (
_CONST char*)strDatabaseEnv.data(),
312 ByteStringBuilder sb;
313 if (!__lastErrorMessage.isEmpty())
314 sb = __lastErrorMessage;
317 ISC_STATUS* pStatus = __status;
319 for(
size_t i = 0; (nLen = isc_interprete(sz, &pStatus))
323 sb.append(sz, 0, nLen);
327 if (sb.length() < *_buflen)
328 *_buflen = sb.length();
330 strncpy(_buf, sb.data(), *_buflen);
344 if (isc_database_info (
347 sizeof(database_info_items),
355 ByteString strVersion;
361 unsigned short length;
363 while(*p != isc_info_end) {
365 length = (
unsigned short)isc_vax_integer(p, 2);
367 if (item == isc_info_version) {
370 strVersion.assign(p, 2, p[1]);
372 else if (item == isc_info_db_id) {
377 unsigned short nStrLen = *t++;
378 strDb.assign(t, nStrLen);
381 strSite.assign(t, nStrLen);
390 ByteString strInfo =
"InterBase " + strVersion +
" \"" + strSite +
':' + strDb +
"\"";
391 if (strInfo.length() < *_buflen)
392 *_buflen = strInfo.length();
394 strncpy(_buf, strInfo.data(), *_buflen);