63{
64 try {
65 if (
Regex::test(__createDatabasePattern__, _connString,
true)) {
66
67 if(isc_dsql_execute_immediate(
68 __status,
69 &__dbHandle,
70 &__trHandle,
71 0,
73 __dialect,
76 return false;
77 }
78 return true;
79 }
80 }
81 catch(RegexException* e) {
83 }
84
85 ListedByteStringToByteStringMap map;
86 Connection::splitConnectionString(_connString, _connlen, map);
87
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"];
93
94 if (!strSqlDialect.isEmpty()) {
95 int nDialect = SQL_DIALECT_CURRENT;
96 char* endptr;
97 long n = strtol(strSqlDialect, &endptr, 10);
98 if (
n == LONG_MAX ||
n == LONG_MIN
99 ||
n < INT_MIN || INT_MAX <
n
100 ) {
102 + strSqlDialect);
103 return false;
104 }
105
107
108 if (!(nDialect == SQL_DIALECT_V5
109 || nDialect == SQL_DIALECT_V6_TRANSITION
110 || nDialect == SQL_DIALECT_V6)) {
112 return false;
113 }
114
115 __dialect = nDialect;
116 }
117
118 if ((strUser.length() > 127) || (strPassword.length() > 127)) {
119
121 return false;
122 }
123
124 ByteString strDatabaseEnv;
125 if (!strServer.isEmpty())
126 strDatabaseEnv = strServer + ":";
127
128 if (!strDatabase.isEmpty())
129 strDatabaseEnv = strDatabaseEnv + strDatabase;
130
131 if (strDatabaseEnv.isEmpty()) {
133 return false;
134 }
135
136
137 ByteStringBuilder dpb;
138 dpb = (char)isc_dpb_version1;
139 dpb += (char)isc_dpb_user_name;
140 dpb += (char)strUser.length();
141 dpb += strUser;
142 dpb += (char)isc_dpb_password;
143 dpb += (char)strPassword.length();
144 dpb += strPassword;
145
146 static const char __UTF8__[] = "UTF8";
147 dpb += (char)isc_dpb_lc_ctype;
148 dpb += (char)(sizeof(__UTF8__) - 1);
149 dpb += __UTF8__;
150
151#if defined(FIREBIRD_IBASE_H) && FB_API_VER >= 40
152 static const char __SET_BIND__[] =
153 "DECFLOAT TO VARCHAR;"
154 "INT128 TO VARCHAR;"
155 "TIME ZONE TO EXTENDED";
156 dpb += (char)isc_dpb_set_bind;
157 dpb += (char)(sizeof(__SET_BIND__) - 1);
158 dpb += __SET_BIND__;
159#endif
160
161#ifdef FIREBIRD_IBASE_H
162 #undef _CONST
163 #define _CONST const
164#endif
165
166 if (isc_attach_database(
167 __status,
168 (short) strDatabaseEnv.length(),
169 (
_CONST char*) strDatabaseEnv.data(),
170 &__dbHandle,
171 (short) dpb.length(),
172 (
_CONST char*) dpb.data())
173 ) {
174
177 return false;
178 }
179 return true;
180}
#define __SET_ERROR_MSG(str)
static bool test(const wchar_t *_regex, const wchar_t *_string, bool _icase=false) __DCL_THROWS1(RegexException *)
@ eInvalidConnectionString