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 dpb += (char)isc_dpb_lc_ctype;
147 dpb += (char)4;
148 dpb += "UTF8";
149
150 if (isc_attach_database(
151 __status,
152 strDatabaseEnv.length(),
153 (
_CONST char*)strDatabaseEnv.data(),
154 &__dbHandle,
155 dpb.length(),
157 ) {
158
161 return false;
162 }
163 return true;
164}
#define __SET_ERROR_MSG(str)
static bool test(const wchar_t *_regex, const wchar_t *_string, bool _icase=false) __DCL_THROWS1(RegexException *)
@ eInvalidConnectionString