DBD-Sybase
view release on metacpan or search on metacpan
imp_dbh->database[0] = 0;
imp_dbh->curr_db[0] = 0;
imp_dbh->encryptPassword[0] = 0;
imp_dbh->showSql = 0;
imp_dbh->showEed = 0;
imp_dbh->flushFinish = FLUSH_FINISH;
imp_dbh->doRealTran = NO_CHAINED_TRAN; /* default to use chained transaction mode */
imp_dbh->chainedSupported = 1;
imp_dbh->quotedIdentifier = 0;
imp_dbh->rowcount = 0;
imp_dbh->doProcStatus = PROC_STATUS;
imp_dbh->useBin0x = 0;
imp_dbh->binaryImage = 0;
imp_dbh->deadlockRetry = 0;
imp_dbh->deadlockSleep = 0;
imp_dbh->deadlockVerbose = 0;
imp_dbh->nsqlNoStatus = 0;
imp_dbh->noChildCon = 0;
imp_dbh->failedDbUseFatal = fetchAttrib(attribs, "syb_failed_db_fatal");
imp_dbh->bindEmptyStringNull = fetchAttrib(attribs, "syb_bind_empty_string_as_null");
imp_dbh->err_handler = fetchSvAttrib(attribs, "syb_err_handler");
imp_dbh->alwaysForceFailure = 1;
imp_dbh->kerberosPrincipal[0] = 0;
imp_dbh->kerbGetTicket = fetchSvAttrib(attribs, "syb_kerberos_serverprincipal");
imp_dbh->disconnectInChild = fetchAttrib(attribs, "syb_disconnect_in_child");
imp_dbh->host[0] = 0;
imp_dbh->port[0] = 0;
imp_dbh->enable_utf8 = fetchAttrib(attribs, "syb_enable_utf8");
#if !defined(DBD_CAN_HANDLE_UTF8)
if (imp_dbh->enable_utf8) {
warn("The current version of OpenClient can't handle utf8 data.");
}
imp_dbh->enable_utf8 = 0;
#endif
imp_dbh->blkLogin[0] = 0;
imp_dbh->dateFmt = 0;
imp_dbh->inUse = 0;
imp_dbh->init_done = 0;
if (strchr(dsn, '=')) {
extractFromDsn("server=", dsn, imp_dbh->server, 64);
extractFromDsn("charset=", dsn, imp_dbh->charset, 64);
extractFromDsn("database=", dsn, imp_dbh->database, 260);
extractFromDsn("packetSize=", dsn, imp_dbh->packetSize, 64);
extractFromDsn("language=", dsn, imp_dbh->language, 64);
extractFromDsn("interfaces=", dsn, imp_dbh->ifile, 255);
extractFromDsn("loginTimeout=", dsn, imp_dbh->loginTimeout, 64);
extractFromDsn("timeout=", dsn, imp_dbh->timeout, 64);
extractFromDsn("scriptName=", dsn, imp_dbh->scriptName, 255);
extractFromDsn("hostname=", dsn, imp_dbh->hostname, 255);
extractFromDsn("tdsLevel=", dsn, imp_dbh->tdsLevel, 30);
extractFromDsn("encryptPassword=", dsn, imp_dbh->encryptPassword, 10);
extractFromDsn("kerberos=", dsn, imp_dbh->kerberosPrincipal, 255);
extractFromDsn("host=", dsn, imp_dbh->host, 64);
extractFromDsn("port=", dsn, imp_dbh->port, 20);
extractFromDsn("maxConnect=", dsn, imp_dbh->maxConnect, 25);
extractFromDsn("sslCAFile=", dsn, imp_dbh->sslCAFile, 255);
extractFromDsn("bulkLogin=", dsn, imp_dbh->blkLogin, 10);
extractFromDsn("tds_keepalive=", dsn, imp_dbh->tds_keepalive, 10);
extractFromDsn("serverType=", dsn, imp_dbh->serverType, 30);
} else {
strncpy(imp_dbh->server, dsn, 64);
imp_dbh->server[63] = 0;
}
strncpy(imp_dbh->uid, uid, UID_PWD_SIZE);
imp_dbh->uid[UID_PWD_SIZE - 1] = 0;
strncpy(imp_dbh->pwd, pwd, UID_PWD_SIZE);
imp_dbh->pwd[UID_PWD_SIZE - 1] = 0;
sv_setpv(DBIc_ERRSTR(imp_dbh), "");
if (imp_dbh->kerbGetTicket) {
fetchKerbTicket(imp_dbh);
}
imp_dbh->pid = getpid();
#if PERL_VERSION >= 8 && defined(_REENTRANT)
MUTEX_LOCK(context_alloc_mutex);
#endif
if ((imp_dbh->connection = syb_db_connect(imp_dbh)) == NULL) {
retval = 0;
} else {
retval = 1;
}
#if PERL_VERSION >= 8 && defined(_REENTRANT)
MUTEX_UNLOCK(context_alloc_mutex);
#endif
if (!retval) {
return retval;
}
if (!imp_dbh->serverType[0] || !strncasecmp(imp_dbh->serverType, "ase", 3)) {
get_server_version(dbh, imp_dbh, imp_dbh->connection);
}
DBIc_IMPSET_on(imp_dbh); /* imp_dbh set up now */
DBIc_ACTIVE_on(imp_dbh); /* call disconnect before freeing*/
DBIc_LongReadLen(imp_dbh) = 32768;
return 1;
}
static CS_CONNECTION *syb_db_connect(imp_dbh_t *imp_dbh) {
dTHR;
CS_RETCODE retcode;
CS_CONNECTION *connection = NULL;
char ofile[255];
int len;
/* Allow increase of the max number of connections - patch supplied by Ed Avis */
if (imp_dbh->maxConnect[0]) {
/* Maximum number of connections. */
const char * const s = imp_dbh->maxConnect;
}
if ((retcode = ct_config(context, CS_SET, CS_TIMEOUT, &timeout, CS_UNUSED, NULL)) != CS_SUCCEED) {
warn("ct_config(CS_SET, CS_TIMEOUT) failed");
}
}
if (imp_dbh->language[0] == 0 && imp_dbh->charset[0] == 0) {
if (DBIc_DBISTATE(imp_dbh)->debug >= 3) {
PerlIO_printf(DBIc_LOGPIO(imp_dbh)," syb_db_login() -> using global CS_LOCALE data\n");
}
} else {
CS_INT type = CS_DATES_SHORT;
if (DBIc_DBISTATE(imp_dbh)->debug >= 3) {
PerlIO_printf(DBIc_LOGPIO(imp_dbh), " syb_db_login() -> using private CS_LOCALE data\n");
}
/* Set up the proper locale - to handle character sets, etc. */
if ((retcode = cs_loc_alloc(context, &imp_dbh->locale) != CS_SUCCEED)) {
warn("cs_loc_alloc failed");
return 0;
}
if (cs_locale(context, CS_SET, imp_dbh->locale, CS_LC_ALL, (CS_CHAR*) NULL, CS_UNUSED, (CS_INT*) NULL)
!= CS_SUCCEED) {
warn("cs_locale(CS_LC_ALL) failed");
return 0;
}
if (imp_dbh->language[0] != 0) {
if (DBIc_DBISTATE(imp_dbh)->debug >= 3) {
PerlIO_printf(DBIc_LOGPIO(imp_dbh), " syb_db_login() -> cs_locale(CS_SYB_LANG,%s)\n",
imp_dbh->language);
}
if (cs_locale(context, CS_SET, imp_dbh->locale, CS_SYB_LANG,
(CS_CHAR*) imp_dbh->language, CS_NULLTERM, (CS_INT*) NULL)
!= CS_SUCCEED) {
warn("cs_locale(CS_SYB_LANG, %s) failed", imp_dbh->language);
return 0;
}
}
if (imp_dbh->charset[0] != 0) {
if (DBIc_DBISTATE(imp_dbh)->debug >= 3) {
PerlIO_printf(DBIc_LOGPIO(imp_dbh),
" syb_db_login() -> cs_locale(CS_SYB_CHARSET,%s)\n",
imp_dbh->charset);
}
if (cs_locale(context, CS_SET, imp_dbh->locale, CS_SYB_CHARSET,
(CS_CHAR*) imp_dbh->charset, CS_NULLTERM, (CS_INT*) NULL)
!= CS_SUCCEED) {
warn("cs_locale(CS_SYB_CHARSET, %s) failed", imp_dbh->charset);
return 0;
}
}
if (cs_dt_info(context, CS_SET, imp_dbh->locale, CS_DT_CONVFMT,
CS_UNUSED, (CS_VOID*) &type, CS_SIZEOF(CS_INT), NULL)
!= CS_SUCCEED) {
warn("cs_dt_info() failed");
}
}
#if defined(CS_CON_KEEPALIVE)
if (imp_dbh->tds_keepalive[0]) {
int tds_keepalive = atoi(imp_dbh->tds_keepalive);
if (tds_keepalive != 1) {
tds_keepalive = 0;
}
if(DBIc_DBISTATE(imp_dbh)->debug >= 3) {
PerlIO_printf(DBIc_LOGPIO(imp_dbh), "syb_db_login() -> ct_config(CS_CON_KEEPALIVE,%d)\n", tds_keepalive);
}
if((retcode = ct_config(context, CS_SET, CS_CON_KEEPALIVE, &tds_keepalive, CS_UNUSED, NULL)) != CS_SUCCEED) {
warn("ct_config(CS_SET, CS_CON_KEEPALIVE) failed");
}
}
#endif
if ((retcode = ct_con_alloc(context, &connection)) != CS_SUCCEED) {
warn("ct_con_alloc failed");
return 0;
}
if (imp_dbh->locale) {
if (ct_con_props(connection, CS_SET, CS_LOC_PROP,
(CS_VOID*)imp_dbh->locale, CS_UNUSED, (CS_INT*)NULL)
!= CS_SUCCEED) {
warn("ct_con_props(CS_LOC_PROP) failed");
return 0;
}
}
if ((retcode = ct_con_props(connection, CS_SET, CS_USERDATA, &imp_dbh,
CS_SIZEOF(imp_dbh), NULL)) != CS_SUCCEED) {
warn("ct_con_props(CS_USERDATA) failed");
return 0;
}
if (imp_dbh->tdsLevel[0] != 0) {
CS_INT value = 0;
if (strEQ(imp_dbh->tdsLevel, "CS_TDS_40")) {
value = CS_TDS_40;
} else if (strEQ(imp_dbh->tdsLevel, "CS_TDS_42")) {
value = CS_TDS_42;
} else if (strEQ(imp_dbh->tdsLevel, "CS_TDS_46")) {
value = CS_TDS_46;
} else if (strEQ(imp_dbh->tdsLevel, "CS_TDS_495")) {
value = CS_TDS_495;
} else if (strEQ(imp_dbh->tdsLevel, "CS_TDS_50")) {
value = CS_TDS_50;
}
if (value) {
if (DBIc_DBISTATE(imp_dbh)->debug >= 3) {
PerlIO_printf(DBIc_LOGPIO(imp_dbh), " syb_db_login() -> ct_con_props(CS_TDS_VERSION,%s)\n",
imp_dbh->tdsLevel);
}
if (ct_con_props(connection, CS_SET, CS_TDS_VERSION,
(CS_VOID*)&value, CS_UNUSED, (CS_INT*)NULL) != CS_SUCCEED) {
warn("ct_con_props(CS_TDS_VERSION, %s) failed", imp_dbh->tdsLevel);
}
} else {
warn("Unkown tdsLevel value %s found", imp_dbh->tdsLevel);
}
}
if (imp_dbh->packetSize[0] != 0) {
int i = atoi(imp_dbh->packetSize);
if (DBIc_DBISTATE(imp_dbh)->debug >= 3) {
PerlIO_printf(DBIc_LOGPIO(imp_dbh), " syb_db_login() -> ct_con_props(CS_PACKETSIZE,%d)\n", i);
}
if (ct_con_props(connection, CS_SET, CS_PACKETSIZE, (CS_VOID*)&i,
( run in 3.343 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )