86{
87 try {
88 if (
Regex::test(__createDatabasePattern__, _conns,
true)) {
89
90 if(isc_dsql_execute_immediate(
91 __status,
92 &__dbHandle,
93 &__trHandle,
94 0,
96 __dialect,
98 )) {
100 return false;
101 }
102 return true;
103 }
104 }
105 catch(RegexException* e) {
107 }
108
109 ListedByteStringToByteStringMap map;
110 Connection::splitConnStr(_conns, _connlen, map);
111
112 ByteString _SERVER = map["SERVER"];
113 ByteString _DATABASE = map["DATABASE"];
114 ByteString _USER = map["USER"];
115 ByteString _PASSWORD = map["PASSWORD"];
116 ByteString _SQL_DIALECT = map["SQL_DIALECT"];
117
118 if (!_SQL_DIALECT.isEmpty()) {
119 int nDialect = SQL_DIALECT_CURRENT;
120 char* endptr;
121 long n = strtol(_SQL_DIALECT, &endptr, 10);
122 if (n == LONG_MAX || n == LONG_MIN
123 || n < INT_MIN || INT_MAX < n
124 ) {
126 + _SQL_DIALECT);
127 return false;
128 }
129
130 nDialect = (int)n;
131
132 if (!(nDialect == SQL_DIALECT_V5
133 || nDialect == SQL_DIALECT_V6_TRANSITION
134 || nDialect == SQL_DIALECT_V6)
135 ) {
137 return false;
138 }
139
140 __dialect = nDialect;
141 }
142
143 if ((_USER.length() > 127) || (_PASSWORD.length() > 127)) {
144
146 return false;
147 }
148
149 ByteString dbEnv;
150 if (!_SERVER.isEmpty())
151 dbEnv = _SERVER + ":";
152
153 if (!_DATABASE.isEmpty())
154 dbEnv = dbEnv + _DATABASE;
155
156 if (dbEnv.isEmpty()) {
158 return false;
159 }
160
161
162 ByteStringBuilder dpb;
163 dpb = (char)isc_dpb_version1;
164 dpb += (char)isc_dpb_user_name;
165 dpb += (char)_USER.length();
166 dpb += _USER;
167 dpb += (char)isc_dpb_password;
168 dpb += (char)_PASSWORD.length();
169 dpb += _PASSWORD;
170
171 static const char __UTF8__[] = "UTF8";
172 dpb += (char)isc_dpb_lc_ctype;
173 dpb += (char)(sizeof(__UTF8__) - 1);
174 dpb += __UTF8__;
175
176#if defined(FIREBIRD_IBASE_H) && FB_API_VER >= 40
177 static const char __SET_BIND__[] =
178 "DECFLOAT TO VARCHAR;"
179 "INT128 TO VARCHAR;"
180 "TIME ZONE TO EXTENDED";
181 dpb += (char)isc_dpb_set_bind;
182 dpb += (char)(sizeof(__SET_BIND__) - 1);
183 dpb += __SET_BIND__;
184#endif
185
186#ifdef FIREBIRD_IBASE_H
187 #undef _CONST
188 #define _CONST const
189#endif
190
191 if (isc_attach_database(
192 __status,
193 (short) dbEnv.length(),
194 (
_CONST char*) dbEnv.data(),
195 &__dbHandle,
196 (short) dpb.length(),
197 (
_CONST char*) dpb.data())
198 ) {
199
202 return false;
203 }
204 return true;
205}
#define __SET_ERROR_MSG(_message)
static bool test(const wchar_t *_regex, const wchar_t *_string, bool _icase=false) __DCL_THROWS1(RegexException *)
@ eInvalidConnectionString