📄 connect.c
字号:
client_flag|=CLIENT_NO_SCHEMA;
if (dbc->flag & FLAG_DEBUG)
mysql_debug("d:t:S:O,c::\\myodbc.log");
DBUG_PRINT("info",("MyODBC Version %s Options: %d",DRIVER_VERSION,
dbc->flag));
if (dbc->flag & FLAG_BIG_PACKETS)
max_allowed_packet=~0L;
/* If no DB, use DSN as database name */
if (!lpsetupdlg->aAttr[KEY_DB].szAttr[0])
{
strmov(lpsetupdlg->aAttr[KEY_DB].szAttr,
lpsetupdlg->aAttr[KEY_DSN].szAttr);
}
if (!mysql_real_connect(&dbc->mysql,lpsetupdlg->aAttr[KEY_SERVER].szAttr,
lpsetupdlg->aAttr[KEY_USER].szAttr,
lpsetupdlg->aAttr[KEY_PASSWORD].szAttr,
lpsetupdlg->aAttr[KEY_DB].szAttr,
dbc->port,NullS,client_flag))
{
if (maybe_prompt && !fPrompt)
{
fPrompt=TRUE;
goto retry;
}
strmov(dbc->sqlstate,"S1000");
GlobalUnlock(hglbAttr);
GlobalFree(hglbAttr);
DBUG_RETURN(SQL_ERROR);
}
dbc->dsn=my_strdup(lpsetupdlg->aAttr[KEY_DSN].szAttr,MYF(MY_WME));
dbc->database=my_strdup(lpsetupdlg->aAttr[KEY_DB].szAttr,MYF(MY_WME));
dbc->server=my_strdup(lpsetupdlg->aAttr[KEY_SERVER].szAttr,MYF(MY_WME));
dbc->user=my_strdup(lpsetupdlg->aAttr[KEY_USER].szAttr,MYF(MY_WME));
dbc->password=my_strdup(lpsetupdlg->aAttr[KEY_PASSWORD].szAttr,MYF(MY_WME));
GlobalUnlock(hglbAttr);
GlobalFree(hglbAttr);
DBUG_RETURN(SQL_SUCCESS);
#endif /* IS NOT UNIX */
#ifdef _UNIX_
UCHAR FAR *connstrin=NULL;
char *KEY_DSN=NULL;
char *KEY_SERVER=NULL;
char *KEY_USER=NULL;
char *KEY_PASSWORD=NULL;
char *KEY_PORT=NULL;
char *KEY_OPTION=NULL;
char *KEY_DB=NULL;
char *KEY_SOCKET=NULL;
char *tok[9];
char *tok2=NULL;
char *tok3=NULL;
int i;
uint client_flag=0;
BOOL fPrompt = FALSE;
DBC FAR *dbc=(DBC FAR*) hdbc;
DBUG_ENTER("SQLDriverConnect");
DBUG_PRINT("enter",("fDriverCompletion: %d",fDriverCompletion));
if ((szConnStrIn == NULL) || (!cbConnStrIn) ||
((cbConnStrIn == SQL_NTS) && (!szConnStrIn[0])))
fPrompt = TRUE;
else
{
/* Check connection string for completeness. */
/* Prompt if not all params */
connstrin=(UCHAR FAR *) my_strdup(szConnStrIn,MYF(MY_WME));
tok[0]=my_strtok(connstrin,";");
for (i=1 ; i <= 7 ; i++)
tok[i]=my_strtok(NULL,";");
tok[i]=NULL;
for (i=0 ; tok[i] ; i++)
{
if (tok2 = my_strtok(tok[i], "="))
{
if (strcmp("DSN", tok2) == 0)
{
if ((tok3 = my_strtok(NULL, "\0")) && tok3[0])
KEY_DSN = (char*) my_strdup(tok3, MYF(MY_WME));
else
{
x_free(KEY_DSN);
KEY_DSN = NULL;
}
}
if (strcmp("DB", tok2) == 0)
{
if ((tok3 = my_strtok(NULL, "\0")) && tok3[0])
KEY_DB = (char*) my_strdup(tok3, MYF(MY_WME));
else
{
x_free(KEY_DB);
KEY_DB = NULL;
}
}
if (strcmp("UID", tok2) == 0)
{
if ((tok3 = my_strtok(NULL, "\0")) && tok3[0])
KEY_USER = (char*) my_strdup(tok3, MYF(MY_WME));
else
{
x_free(KEY_USER);
KEY_USER = NULL;
}
}
if (strcmp("PWD", tok2) == 0)
{
if ((tok3 = my_strtok(NULL, "\0")) && tok3[0])
KEY_PASSWORD = (char*) my_strdup(tok3, MYF(MY_WME));
else
{
x_free(KEY_PASSWORD);
KEY_PASSWORD = NULL;
}
}
if (strcmp("SERVER", tok2) == 0)
{
if ((tok3 = my_strtok(NULL, "\0")) && tok3[0])
KEY_SERVER = (char*) my_strdup(tok3, MYF(MY_WME));
else
{
x_free(KEY_SERVER);
KEY_SERVER = NULL;
}
}
if (strcmp("PORT", tok2) == 0)
{
if ((tok3 = my_strtok(NULL, "\0")) && tok3[0])
KEY_PORT = (char*) my_strdup(tok3, MYF(MY_WME));
else
{
x_free(KEY_PORT);
KEY_PORT = NULL;
}
}
if (strcmp("SOCKET", tok2) == 0)
{
if ((tok3 = my_strtok(NULL, "\0")) && tok3[0])
KEY_SOCKET = (char*) my_strdup(tok3, MYF(MY_WME));
else
{
x_free(KEY_SOCKET);
KEY_PORT = NULL;
}
}
if (strcmp("OPTION", tok2) == 0)
{
if ((tok3 = my_strtok(NULL, "\0")) && tok3[0])
KEY_OPTION = (char*) my_strdup(tok3, MYF(MY_WME));
else
{
x_free(KEY_OPTION);
KEY_PORT = NULL;
}
}
}
}
if (!KEY_DB && KEY_DSN)
KEY_DB = (char*) my_strdup(KEY_DSN, MYF(MY_WME));
if (!KEY_SERVER)
KEY_SERVER = (char*) my_strdup("localhost", MYF(MY_WME));
if (!KEY_PORT)
KEY_PORT = (char*) my_strdup("3306", MYF(MY_WME));
if (!KEY_SOCKET)
KEY_SOCKET = (char*) my_strdup("", MYF(MY_WME));
if (!KEY_USER)
KEY_USER = (char*) my_strdup("dummy", MYF(MY_WME));
if (!KEY_PASSWORD)
KEY_PASSWORD = (char*) my_strdup("", MYF(MY_WME));
if (!KEY_OPTION)
KEY_OPTION = (char*) my_strdup("0", MYF(MY_WME));
if (fDriverCompletion == SQL_DRIVER_PROMPT ||
((fDriverCompletion == SQL_DRIVER_COMPLETE ||
fDriverCompletion == SQL_DRIVER_COMPLETE_REQUIRED) &&
(!KEY_DSN)))
fPrompt = TRUE;
}
if (fPrompt)
{
DBUG_RETURN(set_error((DBC FAR*) hdbc,"S1000","No DSN entered",0));
}
if (szConnStrOut)
{
UCHAR FAR *pos;
pos=strxmov(szConnStrOut,
"DSN=",KEY_DSN,
";DB=",KEY_DB,
";SERVER=",KEY_SERVER,
";UID=",KEY_USER,
";PWD=",KEY_PASSWORD,
";PORT=",KEY_PORT,
";SOCKET=",KEY_SOCKET,
";OPTION=",KEY_OPTION,
";",NullS);
*pcbConnStrOut=(int) (pos-szConnStrOut);
}
dbc->flag=atoi(KEY_OPTION);
dbc->port=atoi(KEY_PORT);
if (dbc->flag & FLAG_FOUND_ROWS)
client_flag=CLIENT_FOUND_ROWS;
if (dbc->flag & FLAG_NO_SCHEMA)
client_flag|=CLIENT_NO_SCHEMA;
if (dbc->flag & FLAG_DEBUG)
mysql_debug("d:t:S:O,/tmp/myodbc.log");
DBUG_PRINT("info",("MyODBC Version %s Options: %d",DRIVER_VERSION,
dbc->flag));
if (dbc->flag & FLAG_BIG_PACKETS)
max_allowed_packet=~0L;
#if MYSQL_VERSION_ID >= 32200
if (!mysql_real_connect(&dbc->mysql,KEY_SERVER,
KEY_USER,
KEY_PASSWORD,
KEY_DB,
dbc->port,
KEY_SOCKET[0] ? KEY_SOCKET : NullS,
client_flag))
{
strmov(dbc->sqlstate,"S1000");
DBUG_RETURN(SQL_ERROR);
}
#else
if (!mysql_real_connect(&dbc->mysql,KEY_SERVER,
KEY_USER,
KEY_PASSWORD,
dbc->port,
KEY_SOCKET[0] ? KEY_SOCKET : NullS,
client_flag))
{
strmov(dbc->sqlstate,"S1000");
DBUG_RETURN(SQL_ERROR);
}
if (mysql_select_db(&dbc->mysql,KEY_DB))
{
strmov(dbc->sqlstate,"08004");
mysql_close(&dbc->mysql);
DBUG_RETURN(SQL_ERROR);
}
#endif
dbc->dsn=my_strdup(KEY_DSN,MYF(MY_WME));
dbc->database=my_strdup(KEY_DB,MYF(MY_WME));
dbc->server=my_strdup(KEY_SERVER,MYF(MY_WME));
dbc->user=my_strdup(KEY_USER,MYF(MY_WME));
dbc->password=my_strdup(KEY_PASSWORD,MYF(MY_WME));
x_free(KEY_DSN);
x_free(KEY_DB);
x_free(KEY_SERVER);
x_free(KEY_USER);
x_free(KEY_PASSWORD);
x_free(KEY_PORT);
x_free(KEY_SOCKET);
x_free(KEY_OPTION);
x_free(connstrin);
DBUG_RETURN(SQL_SUCCESS);
#endif /* IS UNIX */
}
RETCODE SQL_API SQLBrowseConnect(HDBC hdbc,UCHAR FAR *szConnStrIn,
SWORD cbConnStrIn,
UCHAR FAR *szConnStrOut,SWORD cbConnStrOutMax,
SWORD FAR *pcbConnStrOut)
{
DBUG_ENTER("SQLBrowseConnect");
DBUG_RETURN(set_error((DBC FAR*) hdbc,"IM001","This doesn't work yet",4000));
}
RETCODE SQL_API SQLDisconnect(HDBC hdbc)
{
LIST *list_element,*next_element;
DBC FAR *dbc=(DBC FAR*) hdbc;
for (list_element=dbc->statements ; list_element ;
list_element=next_element)
{
next_element=list_element->next;
SQLFreeStmt((STMT FAR*) list_element->data,SQL_DROP);
}
mysql_close(&dbc->mysql);
return SQL_SUCCESS;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -