Added:
branches/guffert/wingui/dialog/callbacks.c
branches/guffert/wingui/dialog/utils.c
Removed:
branches/guffert/wingui/dialog/callbacks.cpp
branches/guffert/wingui/dialog/utils.cpp
Modified:
branches/guffert/driver/connect.c
branches/guffert/util/CMakeLists.txt
branches/guffert/wingui/CMakeLists.txt
branches/guffert/wingui/ConfigDSN.c
branches/guffert/wingui/dialog/callbacks.h
branches/guffert/wingui/dialog/utils.h
branches/guffert/wingui/myodbc5S.def
branches/guffert/wingui/odbcdialogparams/odbcdialogparams.cpp
branches/guffert/wingui/odbcdialogparams/odbcdialogparams.h
Log:
updated utils and callbacks in wingui to be pure C, and some small fixes
added most things needed for prompting with wingui
Modified: branches/guffert/driver/connect.c
===================================================================
--- branches/guffert/driver/connect.c 2007-11-01 17:33:36 UTC (rev 832)
+++ branches/guffert/driver/connect.c 2007-11-02 16:37:36 UTC (rev 833)
@@ -43,6 +43,7 @@
# define CLIENT_NO_SCHEMA 16
#endif
+#define USE_LEGACY_ODBC_GUI
/**
Get the connection flags based on the driver options.
@@ -433,8 +434,10 @@
DataSource *ds= ds_new();
/* We may have to read driver info to find the setup library. */
Driver *pDriver= driver_new();
+#ifdef USE_LEGACY_ODBC_GUI
/* Legacy setup lib, used for prompting, will be deprecated by native guis */
MYODBCUTIL_DATASOURCE *oldds=
MYODBCUtilAllocDataSource(MYODBCUTIL_DATASOURCE_MODE_DRIVER_CONNECT);
+#endif /* USE_LEGACY_ODBC_GUI */
BOOL bPrompt= FALSE;
HMODULE hModule= NULL;
unsigned long options;
@@ -483,26 +486,17 @@
switch (fDriverCompletion)
{
case SQL_DRIVER_PROMPT:
- oldds->nPrompt= MYODBCUTIL_DATASOURCE_PROMPT_PROMPT;
bPrompt= TRUE;
break;
case SQL_DRIVER_COMPLETE:
- oldds->nPrompt= MYODBCUTIL_DATASOURCE_PROMPT_COMPLETE;
- if (myodbc_do_connect(dbc, ds) == SQL_SUCCESS)
- goto connected;
- bPrompt= TRUE;
- break;
-
case SQL_DRIVER_COMPLETE_REQUIRED:
- oldds->nPrompt= MYODBCUTIL_DATASOURCE_PROMPT_REQUIRED;
if (myodbc_do_connect(dbc, ds) == SQL_SUCCESS)
goto connected;
bPrompt= TRUE;
break;
case SQL_DRIVER_NOPROMPT:
- oldds->nPrompt= MYODBCUTIL_DATASOURCE_PROMPT_NOPROMPT;
bPrompt= FALSE;
break;
@@ -511,6 +505,25 @@
goto error;
}
+#ifdef USE_LEGACY_ODBC_GUI
+ /* set prompt type for legacy GUI code */
+ switch (fDriverCompletion)
+ {
+ case SQL_DRIVER_PROMPT:
+ oldds->nPrompt= MYODBCUTIL_DATASOURCE_PROMPT_PROMPT;
+ break;
+ case SQL_DRIVER_COMPLETE:
+ oldds->nPrompt= MYODBCUTIL_DATASOURCE_PROMPT_COMPLETE;
+ break;
+ case SQL_DRIVER_COMPLETE_REQUIRED:
+ oldds->nPrompt= MYODBCUTIL_DATASOURCE_PROMPT_REQUIRED;
+ break;
+ case SQL_DRIVER_NOPROMPT:
+ oldds->nPrompt= MYODBCUTIL_DATASOURCE_PROMPT_NOPROMPT;
+ break;
+ }
+#endif /* USE_LEGACY_ODBC_GUI */
+
#ifdef __APPLE__
/*
We don't support prompting on Mac OS X, because Qt requires that
@@ -529,7 +542,11 @@
if (bPrompt)
{
+#ifndef USE_LEGACY_ODBC_GUI
+ BOOL (*pFunc)(SQLHWND, SQLWCHAR *, SQLUSMALLINT, SQLWCHAR *, SQLINTEGER);
+#else /* USE_LEGACY_ODBC_GUI */
BOOL (*pFunc)(SQLHDBC, SQLHWND, MYODBCUTIL_DATASOURCE *);
+#endif /* USE_LEGACY_ODBC_GUI */
/*
We can not present a prompt unless we can lookup the name of the setup
@@ -540,8 +557,7 @@
connect with a DSN which does not exist. A possible solution would be to
hard-code some fall-back value for ds->pszDRIVER.
*/
- /* TODO support pszDriverFileName somewhere? */
- if (!ds->driver /*&& !ds->pszDriverFileName*/)
+ if (!ds->driver)
{
char szError[1024];
sprintf(szError,
@@ -605,13 +621,17 @@
goto error;
}
+#ifndef USE_LEGACY_ODBC_GUI
+ pFunc= (BOOL (*)(SQLHWND, SQLWCHAR *, SQLUSMALLINT, SQLWCHAR *, SQLINTEGER))
+ GetProcAddress(hModule, "Driver_Prompt");
+#else /* USE_LEGACY_ODBC_GUI */
/*
The setup library should expose a MYODBCSetupDriverConnect() C entry point
for us to call.
*/
- /* TODO new name? args? */
pFunc= (BOOL (*)(SQLHDBC, SQLHWND, MYODBCUTIL_DATASOURCE *))
GetProcAddress(hModule, "MYODBCSetupDriverConnect");
+#endif /* USE_LEGACY_ODBC_GUI */
if (pFunc == NULL)
{
@@ -630,6 +650,16 @@
goto error;
}
+#ifndef USE_LEGACY_ODBC_GUI
+ /* TODO new */
+ /* Prompt. Function returns false if user cancels. */
+ //if (!pFunc(hdbc, hwnd, NULL))
+ {
+ set_dbc_error(hdbc, "HY000", "User cancelled.", 0);
+ rc= SQL_ERROR;
+ goto error;
+ }
+#else /* USE_LEGACY_ODBC_GUI */
/* Copy to the legacy data source structure for prompting */
if (ds->name)
oldds->pszDSN= _global_strdup(ds_get_utf8attr(ds->name,
&ds->name8));
@@ -701,6 +731,7 @@
ds_setattr_from_utf8(&ds->charset, oldds->pszCHARSET);
if (oldds->pszPORT)
ds->port= strtoul(oldds->pszPORT, NULL, 10);
+#endif /* USE_LEGACY_ODBC_GUI */
}
if ((rc= myodbc_do_connect(dbc, ds)) != SQL_SUCCESS)
@@ -742,7 +773,9 @@
driver_delete(pDriver);
ds_delete(ds);
+#ifdef USE_LEGACY_ODBC_GUI
MYODBCUtilFreeDataSource(oldds);
+#endif /* USE_LEGACY_ODBC_GUI */
return rc;
}
Modified: branches/guffert/util/CMakeLists.txt
===================================================================
--- branches/guffert/util/CMakeLists.txt 2007-11-01 17:33:36 UTC (rev 832)
+++ branches/guffert/util/CMakeLists.txt 2007-11-02 16:37:36 UTC (rev 833)
@@ -20,12 +20,14 @@
##########################################################################
-ADD_LIBRARY(myodbc3u STATIC
- stringutil.c
- stringutil.h
- unicode_transcode.c
- installer.c
- installer.h
+SET(myodbc3u_SRCS stringutil.c
+ stringutil.h
+ unicode_transcode.c
+ installer.c
+ installer.h)
+
+#IF(NOT WIN32)
+ SET(myodbc3u_SRCS ${myodbc3u_SRCS}
MYODBCUtilAllocDataSource.c
MYODBCUtilAllocDriver.c
MYODBCUtilClearDataSource.c
@@ -46,6 +48,9 @@
MYODBCUtilWriteDataSource.c
MYODBCUtilWriteDataSourceStr.c
MYODBCUtilWriteDriver.c)
+#ENDIF(NOT WIN32)
+ADD_LIBRARY(myodbc3u STATIC ${myodbc3u_SRCS})
+
TARGET_LINK_LIBRARIES(myodbc3u ${ODBCINSTLIB})
Modified: branches/guffert/wingui/CMakeLists.txt
===================================================================
--- branches/guffert/wingui/CMakeLists.txt 2007-11-01 17:33:36 UTC (rev 832)
+++ branches/guffert/wingui/CMakeLists.txt 2007-11-02 16:37:36 UTC (rev 833)
@@ -23,9 +23,9 @@
ADD_DEFINITIONS(-DUNICODE -D_UNICODE)
ADD_LIBRARY(myodbc5S SHARED
- dialog/callbacks.cpp
+ dialog/callbacks.c
dialog/callbacks.h
- dialog/utils.cpp
+ dialog/utils.c
dialog/utils.h
odbcdialogparams/main.cpp
odbcdialogparams/odbcdialogparams.cpp
@@ -41,6 +41,7 @@
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR})
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/util)
+INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/driver)
TARGET_LINK_LIBRARIES(myodbc5S
myodbc3u ${ODBCLIB} ${ODBCINSTLIB} ${MYSQL_CLIENT_LIBS}
Modified: branches/guffert/wingui/ConfigDSN.c
===================================================================
--- branches/guffert/wingui/ConfigDSN.c 2007-11-01 17:33:36 UTC (rev 832)
+++ branches/guffert/wingui/ConfigDSN.c 2007-11-02 16:37:36 UTC (rev 833)
@@ -27,6 +27,55 @@
#include "stringutil.h"
#include "odbcdialogparams/odbcdialogparams.h"
+/* TODO no L"" */
+static SQLWCHAR *W_INVALID_ATTR_STR = L"Invalid attribute string";
+static SQLWCHAR *W_USER_CANCELLED = L"User cancelled";
+
+BOOL Driver_Prompt(HWND hWnd, SQLWCHAR *instr, SQLUSMALLINT completion,
+ SQLWCHAR *outstr, SQLINTEGER outmax, SQLINTEGER *outlen)
+{
+ DataSource *ds= ds_new();
+ BOOL rc= FALSE;
+
+ /*
+ parse the attr string, dsn lookup will have already been
+ done in the driver
+ */
+ if (instr && *instr)
+ {
+ if (ds_from_kvpair(ds, instr, (SQLWCHAR)';'))
+ {
+ SQLPostInstallerError(ODBC_ERROR_INVALID_KEYWORD_VALUE,
+ W_INVALID_ATTR_STR);
+ goto exit;
+ }
+ }
+
+ /* TODO make sure the ds->driver is ok, for Test,etc */
+ /* Show the dialog and handle result */
+ if (ShowOdbcParamsDialog(ds, hWnd, TRUE) == 1)
+ {
+ /* serialize to outstr */
+ if ((*outlen= ds_to_kvpair(ds, outstr, outmax, (SQLWCHAR)';')) == -1)
+ {
+ /* truncated, up to caller to see outmax == *outlen */
+ *outlen= outmax;
+ outstr[outmax]= 0;
+ }
+ rc= TRUE;
+ }
+ else
+ {
+ SQLPostInstallerError(ODBC_ERROR_INVALID_KEYWORD_VALUE,
+ W_USER_CANCELLED);
+ }
+
+exit:
+ ds_delete(ds);
+ return rc;
+}
+
+
/*
Add, edit, or remove a Data Source Name (DSN). This function is
called by "Data Source Administrator" on Windows, or similar
@@ -39,15 +88,14 @@
BOOL rc= TRUE;
SQLWCHAR *driverfile;
- if (*pszAttributes)
+ if (pszAttributes && *pszAttributes)
{
if (ds_from_kvpair(ds, pszAttributes, (SQLWCHAR)';'))
{
- SQLPostInstallerError(ODBC_ERROR_INVALID_KEYWORD_VALUE,
- /* TODO can't be long string */
- L"Invalid attribute string");
- rc= FALSE;
- goto exitConfigDSN;
+ SQLPostInstallerError(ODBC_ERROR_INVALID_KEYWORD_VALUE,
+ W_INVALID_ATTR_STR);
+ rc= FALSE;
+ goto exitConfigDSN;
}
if (ds_lookup(ds))
{
@@ -71,7 +119,7 @@
{
case ODBC_ADD_DSN:
case ODBC_CONFIG_DSN:
- if (ShowOdbcParamsDialog(ds, hWnd) == 1)
+ if (ShowOdbcParamsDialog(ds, hWnd, FALSE) == 1)
{
ds_set_strattr(&ds->driver, driverfile);
/* save datasource */
Copied: branches/guffert/wingui/dialog/callbacks.c (from rev 831,
branches/guffert/wingui/dialog/callbacks.cpp)
===================================================================
--- branches/guffert/wingui/dialog/callbacks.c (rev 0)
+++ branches/guffert/wingui/dialog/callbacks.c 2007-11-02 16:37:36 UTC (rev 833)
@@ -0,0 +1,124 @@
+/****************************************************************************
+ * *
+ * File : *
+ * *
+ * Purpose : GUI Callbacks *
+ * *
+ * History : Date Reason *
+ * 00/00/00 Created *
+ * *
+ ****************************************************************************/
+
+#include "callbacks.h"
+#include "stringutil.h"
+
+WCHAR ** errorMsgs = NULL;
+
+SQLHDBC hDBC = SQL_NULL_HDBC;
+
+wchar_t * mytest(HWND hwnd, DataSource* params)
+{
+ SQLHDBC hDbc = hDBC;
+ SQLHENV hEnv = SQL_NULL_HENV;
+ wchar_t *rc;
+
+ if ( SQL_SUCCEEDED( Connect( &hDbc, &hEnv, params ) ) )
+ rc= sqlwchardup(L"Connection successful", SQL_NTS);
+ else
+ {
+ SQLWCHAR state[10];
+ SQLINTEGER native;
+ SQLSMALLINT len;
+ rc= (wchar_t *) my_malloc(512 * sizeof(SQLWCHAR), MYF(0));
+ *rc= 0;
+
+ wcscat(rc, L"Connection Failed");
+ len= sqlwcharlen(rc);
+ if (SQL_SUCCEEDED(SQLGetDiagRecW(SQL_HANDLE_DBC, hDbc, 1, state,
+ &native, rc + len + 10,
+ 512 - len - 11, &len)))
+ {
+ wcscat(rc, L": [");
+ len= sqlwcharlen(rc);
+ sqlwcharncpy(rc + len, state, 6);
+ *(rc + sqlwcharlen(rc) + 1) = ' ';
+ *(rc + sqlwcharlen(rc)) = ']';
+ }
+ }
+
+ Disconnect( hDbc, hEnv );
+ return rc;
+}
+
+BOOL mytestaccept(HWND hwnd, DataSource* params)
+{
+ /* TODO validation */
+ return TRUE;
+}
+
+LIST *mygetdatabases(HWND hwnd, DataSource* params)
+{
+ SQLHENV hEnv = SQL_NULL_HENV;
+ SQLHDBC hDbc = hDBC;
+ SQLHSTMT hStmt;
+ SQLRETURN nReturn;
+ SQLWCHAR szCatalog[MYODBC_DB_NAME_MAX];
+ SQLLEN nCatalog;
+ LIST *dbs= NULL;
+
+ nReturn = Connect( &hDbc, &hEnv, params );
+
+ if ( nReturn != SQL_SUCCESS )
+ ShowDiagnostics( nReturn, SQL_HANDLE_DBC, hDbc );
+ if ( !SQL_SUCCEEDED(nReturn) )
+ {
+ Disconnect( hDbc,hEnv );
+ return NULL;
+ }
+
+ nReturn = SQLAllocHandle( SQL_HANDLE_STMT, hDbc, &hStmt );
+ if ( nReturn != SQL_SUCCESS )
+ ShowDiagnostics( nReturn, SQL_HANDLE_DBC, hDbc );
+ if ( !SQL_SUCCEEDED(nReturn) )
+ {
+ Disconnect( hDbc,hEnv );
+ return NULL;
+ }
+
+ nReturn = SQLTablesW( hStmt, (SQLWCHAR*)SQL_ALL_CATALOGS, SQL_NTS, (SQLWCHAR*)L"",
SQL_NTS, (SQLWCHAR*)L"", 0, (SQLWCHAR*)L"", 0 );
+
+ if ( nReturn != SQL_SUCCESS )
+ ShowDiagnostics( nReturn, SQL_HANDLE_STMT, hStmt );
+ if ( !SQL_SUCCEEDED(nReturn) )
+ {
+ SQLFreeHandle( SQL_HANDLE_STMT, hStmt );
+ Disconnect( hDbc, hEnv );
+ return NULL;
+ }
+
+ nReturn = SQLBindCol( hStmt, 1, SQL_C_WCHAR, szCatalog, MYODBC_DB_NAME_MAX,
&nCatalog );
+ while ( TRUE )
+ {
+ nReturn = SQLFetch( hStmt );
+
+ if ( nReturn == SQL_NO_DATA )
+ break;
+ else if ( nReturn != SQL_SUCCESS )
+ ShowDiagnostics( nReturn, SQL_HANDLE_STMT, hStmt );
+ if ( SQL_SUCCEEDED(nReturn) )
+ dbs= list_cons(sqlwchardup(szCatalog, SQL_NTS), dbs);
+ else
+ break;
+ }
+
+ SQLFreeHandle( SQL_HANDLE_STMT, hStmt );
+ Disconnect( hDbc, hEnv );
+
+ return list_reverse(dbs);
+}
+
+void myhelp(HWND hwnd)
+{
+ /** TODO: Rewrite - Shouldn't be windows stuff here */
+ MessageBoxW(hwnd, L"HELP", L"Sorry, Help is not Available", MB_OK);
+}
Deleted: branches/guffert/wingui/dialog/callbacks.cpp
===================================================================
--- branches/guffert/wingui/dialog/callbacks.cpp 2007-11-01 17:33:36 UTC (rev 832)
+++ branches/guffert/wingui/dialog/callbacks.cpp 2007-11-02 16:37:36 UTC (rev 833)
@@ -1,117 +0,0 @@
-/****************************************************************************
- * *
- * File : *
- * *
- * Purpose : GUI Callbacks *
- * *
- * History : Date Reason *
- * 00/00/00 Created *
- * *
- ****************************************************************************/
-
-#include "callbacks.h"
-#include "stringutil.h"
-
-WCHAR ** errorMsgs = NULL;
-
-SQLHDBC hDBC = SQL_NULL_HDBC;
-
-wchar_t * mytest(HWND hwnd, DataSource* params)
-{
- SQLHDBC hDbc = hDBC;
- SQLHENV hEnv = SQL_NULL_HENV;
-
- if ( SQL_SUCCEEDED( Connect( hDbc, hEnv, params ) ) )
- return sqlwchardup(L"Connection successful", SQL_NTS);
- else
- {
- wchar_t *tmp= (wchar_t *) my_malloc(512 * sizeof(SQLWCHAR), MYF(0));
- SQLWCHAR state[10];
- SQLINTEGER native;
- SQLSMALLINT len;
- *tmp= 0;
-
- wcscat(tmp, L"Connection Failed: [");
- len= sqlwcharlen(tmp);
- SQLGetDiagRecW(SQL_HANDLE_DBC, hDbc, 1, state, &native,
- tmp + len + 7, 512 - len - 8, &len);
- sqlwcharncpy(tmp + sqlwcharlen(tmp), state, 6);
- *(tmp + sqlwcharlen(tmp) + 1) = ' ';
- *(tmp + sqlwcharlen(tmp)) = ']';
-
- return tmp;
- }
-
- Disconnect( hDbc, hEnv );
-}
-
-BOOL mytestaccept(HWND hwnd, DataSource* params)
-{
- /* TODO validation */
- return TRUE;
-}
-
-LIST *mygetdatabases(HWND hwnd, DataSource* params)
-{
- SQLHENV hEnv = SQL_NULL_HENV;
- SQLHDBC hDbc = hDBC;
- SQLHSTMT hStmt;
- SQLRETURN nReturn;
- SQLWCHAR szCatalog[MYODBC_DB_NAME_MAX];
- SQLLEN nCatalog;
- LIST *dbs= NULL;
-
- nReturn = Connect( hDbc, hEnv, params );
-
- if ( nReturn != SQL_SUCCESS )
- ShowDiagnostics( nReturn, SQL_HANDLE_DBC, hDbc );
- if ( !SQL_SUCCEEDED(nReturn) )
- {
- Disconnect( hDbc,hEnv );
- return NULL;
- }
-
- nReturn = SQLAllocHandle( SQL_HANDLE_STMT, hDbc, &hStmt );
- if ( nReturn != SQL_SUCCESS )
- ShowDiagnostics( nReturn, SQL_HANDLE_DBC, hDbc );
- if ( !SQL_SUCCEEDED(nReturn) )
- {
- Disconnect( hDbc,hEnv );
- return NULL;
- }
-
- nReturn = SQLTablesW( hStmt, (SQLWCHAR*)SQL_ALL_CATALOGS, SQL_NTS, (SQLWCHAR*)L"",
SQL_NTS, (SQLWCHAR*)L"", 0, (SQLWCHAR*)L"", 0 );
-
- if ( nReturn != SQL_SUCCESS )
- ShowDiagnostics( nReturn, SQL_HANDLE_STMT, hStmt );
- if ( !SQL_SUCCEEDED(nReturn) )
- {
- Disconnect( hStmt, hDbc, hEnv );
- return NULL;
- }
-
- nReturn = SQLBindCol( hStmt, 1, SQL_C_WCHAR, szCatalog, MYODBC_DB_NAME_MAX,
&nCatalog );
- while ( TRUE )
- {
- nReturn = SQLFetch( hStmt );
-
- if ( nReturn == SQL_NO_DATA )
- break;
- else if ( nReturn != SQL_SUCCESS )
- ShowDiagnostics( nReturn, SQL_HANDLE_STMT, hStmt );
- if ( SQL_SUCCEEDED(nReturn) )
- dbs= list_cons(sqlwchardup(szCatalog, SQL_NTS), dbs);
- else
- break;
- }
-
- Disconnect( hStmt, hDbc, hEnv );
-
- return list_reverse(dbs);
-}
-
-void myhelp(HWND hwnd)
-{
- /** TODO: Rewrite - Shouldn't be windows stuff here */
- MessageBoxW(hwnd, L"HELP", L"Sorry, Help is not Available", MB_OK);
-}
Modified: branches/guffert/wingui/dialog/callbacks.h
===================================================================
--- branches/guffert/wingui/dialog/callbacks.h 2007-11-01 17:33:36 UTC (rev 832)
+++ branches/guffert/wingui/dialog/callbacks.h 2007-11-02 16:37:36 UTC (rev 833)
@@ -8,6 +8,10 @@
#include "MYODBC_MYSQL.h"
#include "utils.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
/* Max DB name len, used when retrieving database list */
#define MYODBC_DB_NAME_MAX 255
@@ -16,4 +20,8 @@
LIST *mygetdatabases(HWND hwnd, DataSource* params);
void myhelp(HWND hwnd);
+#ifdef __cplusplus
+}
#endif
+
+#endif
Copied: branches/guffert/wingui/dialog/utils.c (from rev 831,
branches/guffert/wingui/dialog/utils.cpp)
===================================================================
--- branches/guffert/wingui/dialog/utils.c (rev 0)
+++ branches/guffert/wingui/dialog/utils.c 2007-11-02 16:37:36 UTC (rev 833)
@@ -0,0 +1,213 @@
+/****************************************************************************
+ * *
+ * File : *
+ * *
+ * Purpose : utilities for callbacks. *
+ * *
+ * History : Date Reason *
+ * 00/00/00 Created *
+ * *
+ ****************************************************************************/
+
+/** couple of temporary hacks to make it compile here*/
+/*typedef char byte;*/
+#ifdef _WIN32
+#include <winsock2.h>
+#endif
+/** end hacks */
+
+#include <sql.h>
+
+#include "utils.h"
+
+#include "driver.h"
+#include "stringutil.h"
+
+
+extern SQLHDBC hDBC;
+extern WCHAR ** errorMsgs;
+
+void DecompileOptions(DataSource *params)
+{
+ ulong nOptions = sqlwchartoul( params->option );
+
+ params->dont_optimize_column_width= (nOptions & FLAG_FIELD_LENGTH) > 0;
+ params->return_matching_rows= (nOptions & FLAG_FOUND_ROWS)
> 0; /* 2 */
+ params->allow_big_results= (nOptions & FLAG_BIG_PACKETS) > 0;
+ params->dont_prompt_upon_connect= (nOptions & FLAG_NO_PROMPT) > 0;
+ params->enable_dynamic_cursor= (nOptions & FLAG_DYNAMIC_CURSOR) > 0;
+ params->ignore_N_in_name_table= (nOptions & FLAG_NO_SCHEMA) > 0;
+ params->user_manager_cursor= (nOptions & FLAG_NO_DEFAULT_CURSOR) > 0;
+ params->dont_use_set_locale= (nOptions & FLAG_NO_LOCALE) > 0;
+ params->pad_char_to_full_length= (nOptions & FLAG_PAD_SPACE) > 0;
+ params->return_table_names_for_SqlDesribeCol= (nOptions &
FLAG_FULL_COLUMN_NAMES) > 0;
+ params->use_compressed_protocol= (nOptions & FLAG_COMPRESSED_PROTO) > 0;
+ params->ignore_space_after_function_names= (nOptions & FLAG_IGNORE_SPACE) >
0;
+ params->force_use_of_named_pipes= (nOptions & FLAG_NAMED_PIPE) > 0;
+ params->change_bigint_columns_to_int= (nOptions & FLAG_NO_BIGINT) > 0;
+ params->no_catalog= (nOptions & FLAG_NO_CATALOG) > 0;
+ params->read_options_from_mycnf= (nOptions & FLAG_USE_MYCNF) > 0;
+ params->safe= (nOptions & FLAG_SAFE) > 0;
+ params->disable_transactions= (nOptions & FLAG_NO_TRANSACTIONS) > 0;
+ params->save_queries= (nOptions & FLAG_LOG_QUERY) > 0;
+ params->dont_cache_result= (nOptions & FLAG_NO_CACHE) > 0;
+ params->force_use_of_forward_only_cursors= (nOptions & FLAG_FORWARD_CURSOR) >
0;
+ params->enable_auto_reconnect= (nOptions & FLAG_AUTO_RECONNECT) > 0;
+ params->enable_auto_increment_null_search= (nOptions & FLAG_AUTO_IS_NULL ) >
0;
+}
+
+void FreeEnvHandle( SQLHENV hEnv )
+{
+ if ( hDBC == SQL_NULL_HDBC )
+ SQLFreeHandle( SQL_HANDLE_ENV, hEnv );
+}
+
+
+void Disconnect( SQLHDBC hDbc, SQLHENV hEnv )
+{
+ SQLDisconnect( hDbc );
+
+ if ( hDBC == SQL_NULL_HDBC )
+ SQLFreeHandle( SQL_HANDLE_DBC, hDbc );
+
+ FreeEnvHandle( hEnv );
+}
+
+
+SQLRETURN Connect(SQLHDBC *hDbc, SQLHENV *hEnv, DataSource *params)
+{
+ SQLRETURN nReturn;
+ SQLWCHAR stringConnectIn[1024] = {0};
+
+ /* Blank out DSN name, otherwise it will pull the info from the registry */
+ ds_set_strattr(¶ms->name, NULL);
+
+ if (ds_to_kvpair(params, stringConnectIn, 1024-1, ';') == -1)
+ {
+ /* TODO error message..... */
+ return SQL_ERROR;
+ }
+
+ if ( hDBC == SQL_NULL_HDBC )
+ {
+ nReturn = SQLAllocHandle( SQL_HANDLE_ENV, NULL, hEnv );
+
+ if ( nReturn != SQL_SUCCESS )
+ ShowDiagnostics( nReturn, SQL_HANDLE_ENV, NULL );
+
+ if ( !SQL_SUCCEEDED(nReturn) )
+ return nReturn;
+
+ nReturn = SQLSetEnvAttr(*hEnv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0 );
+
+ if ( nReturn != SQL_SUCCESS )
+ ShowDiagnostics( nReturn, SQL_HANDLE_ENV, NULL );
+
+ if ( !SQL_SUCCEEDED(nReturn) )
+ {
+ return nReturn;
+ }
+
+ nReturn = SQLAllocHandle( SQL_HANDLE_DBC, *hEnv, hDbc );
+ if ( nReturn != SQL_SUCCESS )
+ ShowDiagnostics( nReturn, SQL_HANDLE_ENV, *hEnv );
+ if ( !SQL_SUCCEEDED(nReturn) )
+ {
+ return nReturn;
+ }
+ }
+
+ nReturn = SQLDriverConnectW(*hDbc, NULL, (SQLWCHAR*)( stringConnectIn ), SQL_NTS, NULL,
0, NULL, SQL_DRIVER_NOPROMPT );
+
+ if ( nReturn != SQL_SUCCESS )
+ ShowDiagnostics( nReturn, SQL_HANDLE_DBC, *hDbc );
+
+ return nReturn;
+}
+
+
+void ShowDiagnostics( SQLRETURN nReturn, SQLSMALLINT nHandleType, SQLHANDLE h )
+{
+ BOOL bDiagnostics = FALSE;
+ SQLSMALLINT nRec = 1;
+ SQLWCHAR szSQLState[6];
+ SQLINTEGER nNative;
+ SQLWCHAR szMessage[SQL_MAX_MESSAGE_LENGTH];
+ SQLSMALLINT nMessage;
+
+ if ( h )
+ {
+ *szSQLState = '\0';
+ *szMessage = '\0';
+
+ while ( SQL_SUCCEEDED( SQLGetDiagRecW( nHandleType,
+ h,
+ nRec,
+ szSQLState,
+ &nNative,
+ szMessage,
+ SQL_MAX_MESSAGE_LENGTH,
+ &nMessage ) ) )
+ {
+ szSQLState[5] = '\0';
+ szMessage[SQL_MAX_MESSAGE_LENGTH - 1] = '\0';
+
+
+ //add2list(errorMsgs, szMessage);
+
+ bDiagnostics = TRUE;
+ nRec++;
+
+ *szSQLState = '\0';
+ *szMessage = '\0';
+ }
+ }
+
+ switch ( nReturn )
+ {
+ case SQL_ERROR:
+ //strAssign( popupMsg, L"Request returned with SQL_ERROR." );//, L"MYODBCConfig" );
+ break;
+ case SQL_SUCCESS_WITH_INFO:
+ //strAssign( popupMsg, L"Request return with SQL_SUCCESS_WITH_INFO." );//,
L"MYODBCConfig" );
+ break;
+ case SQL_INVALID_HANDLE:
+ //strAssign( popupMsg, L"Request returned with SQL_INVALID_HANDLE." );//,
L"MYODBCConfig" );
+ break;
+ default:
+ //strAssign( popupMsg, L"Request did not return with SQL_SUCCESS." );//,
L"MYODBCConfig" );
+ break;
+ }
+}
+
+
+unsigned long CompileOptions( DataSource * params )
+{
+ unsigned long nFlags = 0;
+
+ if (params->dont_optimize_column_width) nFlags |= FLAG_FIELD_LENGTH;
+ if (params->return_matching_rows) nFlags |= FLAG_FOUND_ROWS; /*
2 */
+ if (params->allow_big_results) nFlags |= FLAG_BIG_PACKETS;
+ if (params->dont_prompt_upon_connect) nFlags |= FLAG_NO_PROMPT;
+ if (params->enable_dynamic_cursor) nFlags |= FLAG_DYNAMIC_CURSOR;
+ if (params->ignore_N_in_name_table) nFlags |= FLAG_NO_SCHEMA;
+ if (params->user_manager_cursor) nFlags |= FLAG_NO_DEFAULT_CURSOR;
+ if (params->dont_use_set_locale) nFlags |= FLAG_NO_LOCALE;
+ if (params->pad_char_to_full_length) nFlags |= FLAG_PAD_SPACE;
+ if (params->return_table_names_for_SqlDesribeCol) nFlags |=
FLAG_FULL_COLUMN_NAMES;
+ if (params->use_compressed_protocol) nFlags |= FLAG_COMPRESSED_PROTO;
+ if (params->ignore_space_after_function_names) nFlags |= FLAG_IGNORE_SPACE;
+ if (params->force_use_of_named_pipes) nFlags |= FLAG_NAMED_PIPE;
+ if (params->change_bigint_columns_to_int) nFlags |= FLAG_NO_BIGINT;
+ if (params->no_catalog) nFlags |= FLAG_NO_CATALOG;
+ if (params->read_options_from_mycnf) nFlags |= FLAG_USE_MYCNF;
+ if (params->safe) nFlags |= FLAG_SAFE;
+ if (params->disable_transactions) nFlags |= FLAG_NO_TRANSACTIONS;
+ if (params->save_queries) nFlags |= FLAG_LOG_QUERY;
+ if (params->dont_cache_result) nFlags |= FLAG_NO_CACHE;
+ if (params->force_use_of_forward_only_cursors) nFlags |= FLAG_FORWARD_CURSOR;
+ if (params->enable_auto_reconnect) nFlags |= FLAG_AUTO_RECONNECT;
+ if (params->enable_auto_increment_null_search) nFlags |= FLAG_AUTO_IS_NULL;
+
+ return nFlags;
+}
Deleted: branches/guffert/wingui/dialog/utils.cpp
===================================================================
--- branches/guffert/wingui/dialog/utils.cpp 2007-11-01 17:33:36 UTC (rev 832)
+++ branches/guffert/wingui/dialog/utils.cpp 2007-11-02 16:37:36 UTC (rev 833)
@@ -1,224 +0,0 @@
-/****************************************************************************
- * *
- * File : *
- * *
- * Purpose : utilities for callbacks. *
- * *
- * History : Date Reason *
- * 00/00/00 Created *
- * *
- ****************************************************************************/
-
-/*#include "stdafx.h"*/
-
-/** couple of temporary hacks to make it compile here*/
-/*typedef char byte;*/
-#ifdef _WIN32
-#include <winsock2.h>
-#endif
-/** end hacks */
-
-#include <sql.h>
-
-#include "utils.h"
-
-#include "../driver/driver.h"
-#include "../util/stringutil.h"
-#include "../util/MYODBCUtil.h"
-
-
-extern SQLHDBC hDBC;
-extern WCHAR ** errorMsgs;
-
-void DecompileOptions(DataSource *params)
-{
- ulong nOptions = sqlwchartoul( params->option );
-
- params->dont_optimize_column_width= (nOptions & FLAG_FIELD_LENGTH) > 0;
- params->return_matching_rows= (nOptions & FLAG_FOUND_ROWS)
> 0; /* 2 */
- params->allow_big_results= (nOptions & FLAG_BIG_PACKETS) > 0;
- params->dont_prompt_upon_connect= (nOptions & FLAG_NO_PROMPT) > 0;
- params->enable_dynamic_cursor= (nOptions & FLAG_DYNAMIC_CURSOR) > 0;
- params->ignore_N_in_name_table= (nOptions & FLAG_NO_SCHEMA) > 0;
- params->user_manager_cursor= (nOptions & FLAG_NO_DEFAULT_CURSOR) > 0;
- params->dont_use_set_locale= (nOptions & FLAG_NO_LOCALE) > 0;
- params->pad_char_to_full_length= (nOptions & FLAG_PAD_SPACE) > 0;
- params->return_table_names_for_SqlDesribeCol= (nOptions &
FLAG_FULL_COLUMN_NAMES) > 0;
- params->use_compressed_protocol= (nOptions & FLAG_COMPRESSED_PROTO) > 0;
- params->ignore_space_after_function_names= (nOptions & FLAG_IGNORE_SPACE) >
0;
- params->force_use_of_named_pipes= (nOptions & FLAG_NAMED_PIPE) > 0;
- params->change_bigint_columns_to_int= (nOptions & FLAG_NO_BIGINT) > 0;
- params->no_catalog= (nOptions & FLAG_NO_CATALOG) > 0;
- params->read_options_from_mycnf= (nOptions & FLAG_USE_MYCNF) > 0;
- params->safe= (nOptions & FLAG_SAFE) > 0;
- params->disable_transactions= (nOptions & FLAG_NO_TRANSACTIONS) > 0;
- params->save_queries= (nOptions & FLAG_LOG_QUERY) > 0;
- params->dont_cache_result= (nOptions & FLAG_NO_CACHE) > 0;
- params->force_use_of_forward_only_cursors= (nOptions & FLAG_FORWARD_CURSOR) >
0;
- params->enable_auto_reconnect= (nOptions & FLAG_AUTO_RECONNECT) > 0;
- params->enable_auto_increment_null_search= (nOptions & FLAG_AUTO_IS_NULL ) >
0;
-}
-
-void FreeEnvHandle( SQLHENV &hEnv )
-{
- if ( hDBC == SQL_NULL_HDBC )
- SQLFreeHandle( SQL_HANDLE_ENV, hEnv );
-}
-
-
-void Disconnect( SQLHDBC &hDbc, SQLHENV &hEnv )
-{
- SQLDisconnect( hDbc );
-
- if ( hDBC == SQL_NULL_HDBC )
- SQLFreeHandle( SQL_HANDLE_DBC, hDbc );
-
- FreeEnvHandle( hEnv );
-}
-
-
-void Disconnect( SQLHSTMT &hStmt, SQLHDBC &hDbc, SQLHENV &hEnv )
-{
- SQLFreeHandle( SQL_HANDLE_STMT, hStmt );
-
- Disconnect( hDbc, hEnv );
-}
-
-
-SQLRETURN Connect( SQLHDBC & hDbc, SQLHENV & hEnv, DataSource * params )
-{
- SQLRETURN nReturn;
- SQLWCHAR stringConnectIn[1024] = {0};
-
- /* Blank out DSN name, otherwise it will pull the info from the registry */
- ds_set_strattr(¶ms->name, NULL);
-
- if (ds_to_kvpair(params, stringConnectIn, 1024-1, ';') == -1)
- {
- /* TODO error message..... */
- return SQL_ERROR;
- }
-
- if ( hDBC == SQL_NULL_HDBC )
- {
- nReturn = SQLAllocHandle( SQL_HANDLE_ENV, NULL, &hEnv );
-
- if ( nReturn != SQL_SUCCESS )
- ShowDiagnostics( nReturn, SQL_HANDLE_ENV, NULL );
-
- if ( !SQL_SUCCEEDED(nReturn) )
- return nReturn;
-
- nReturn = SQLSetEnvAttr( hEnv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0 );
-
- if ( nReturn != SQL_SUCCESS )
- ShowDiagnostics( nReturn, SQL_HANDLE_ENV, NULL );
-
- if ( !SQL_SUCCEEDED(nReturn) )
- {
- return nReturn;
- }
-
- nReturn = SQLAllocHandle( SQL_HANDLE_DBC, hEnv, &hDbc );
- if ( nReturn != SQL_SUCCESS )
- ShowDiagnostics( nReturn, SQL_HANDLE_ENV, hEnv );
- if ( !SQL_SUCCEEDED(nReturn) )
- {
- return nReturn;
- }
- }
-
- nReturn = SQLDriverConnectW( hDbc, NULL, (SQLWCHAR*)( stringConnectIn ), SQL_NTS, NULL,
0, NULL, SQL_DRIVER_NOPROMPT );
-
- if ( nReturn != SQL_SUCCESS )
- ShowDiagnostics( nReturn, SQL_HANDLE_DBC, hDbc );
-
- return nReturn;
-}
-
-
-void ShowDiagnostics( SQLRETURN nReturn, SQLSMALLINT nHandleType, SQLHANDLE h )
-{
- BOOL bDiagnostics = FALSE;
- SQLSMALLINT nRec = 1;
- SQLWCHAR szSQLState[6];
- SQLINTEGER nNative;
- SQLWCHAR szMessage[SQL_MAX_MESSAGE_LENGTH];
- SQLSMALLINT nMessage;
-
- if ( h )
- {
- *szSQLState = '\0';
- *szMessage = '\0';
-
- while ( SQL_SUCCEEDED( SQLGetDiagRecW( nHandleType,
- h,
- nRec,
- szSQLState,
- &nNative,
- szMessage,
- SQL_MAX_MESSAGE_LENGTH,
- &nMessage ) ) )
- {
- szSQLState[5] = '\0';
- szMessage[SQL_MAX_MESSAGE_LENGTH - 1] = '\0';
-
-
- //add2list(errorMsgs, szMessage);
-
- bDiagnostics = TRUE;
- nRec++;
-
- *szSQLState = '\0';
- *szMessage = '\0';
- }
- }
-
- switch ( nReturn )
- {
- case SQL_ERROR:
- //strAssign( popupMsg, L"Request returned with SQL_ERROR." );//, L"MYODBCConfig" );
- break;
- case SQL_SUCCESS_WITH_INFO:
- //strAssign( popupMsg, L"Request return with SQL_SUCCESS_WITH_INFO." );//,
L"MYODBCConfig" );
- break;
- case SQL_INVALID_HANDLE:
- //strAssign( popupMsg, L"Request returned with SQL_INVALID_HANDLE." );//,
L"MYODBCConfig" );
- break;
- default:
- //strAssign( popupMsg, L"Request did not return with SQL_SUCCESS." );//,
L"MYODBCConfig" );
- break;
- }
-}
-
-
-unsigned long CompileOptions( DataSource * params )
-{
- unsigned long nFlags = 0;
-
- if (params->dont_optimize_column_width) nFlags |= FLAG_FIELD_LENGTH;
- if (params->return_matching_rows) nFlags |= FLAG_FOUND_ROWS; /*
2 */
- if (params->allow_big_results) nFlags |= FLAG_BIG_PACKETS;
- if (params->dont_prompt_upon_connect) nFlags |= FLAG_NO_PROMPT;
- if (params->enable_dynamic_cursor) nFlags |= FLAG_DYNAMIC_CURSOR;
- if (params->ignore_N_in_name_table) nFlags |= FLAG_NO_SCHEMA;
- if (params->user_manager_cursor) nFlags |= FLAG_NO_DEFAULT_CURSOR;
- if (params->dont_use_set_locale) nFlags |= FLAG_NO_LOCALE;
- if (params->pad_char_to_full_length) nFlags |= FLAG_PAD_SPACE;
- if (params->return_table_names_for_SqlDesribeCol) nFlags |=
FLAG_FULL_COLUMN_NAMES;
- if (params->use_compressed_protocol) nFlags |= FLAG_COMPRESSED_PROTO;
- if (params->ignore_space_after_function_names) nFlags |= FLAG_IGNORE_SPACE;
- if (params->force_use_of_named_pipes) nFlags |= FLAG_NAMED_PIPE;
- if (params->change_bigint_columns_to_int) nFlags |= FLAG_NO_BIGINT;
- if (params->no_catalog) nFlags |= FLAG_NO_CATALOG;
- if (params->read_options_from_mycnf) nFlags |= FLAG_USE_MYCNF;
- if (params->safe) nFlags |= FLAG_SAFE;
- if (params->disable_transactions) nFlags |= FLAG_NO_TRANSACTIONS;
- if (params->save_queries) nFlags |= FLAG_LOG_QUERY;
- if (params->dont_cache_result) nFlags |= FLAG_NO_CACHE;
- if (params->force_use_of_forward_only_cursors) nFlags |= FLAG_FORWARD_CURSOR;
- if (params->enable_auto_reconnect) nFlags |= FLAG_AUTO_RECONNECT;
- if (params->enable_auto_increment_null_search) nFlags |= FLAG_AUTO_IS_NULL;
-
- return nFlags;
-}
Modified: branches/guffert/wingui/dialog/utils.h
===================================================================
--- branches/guffert/wingui/dialog/utils.h 2007-11-01 17:33:36 UTC (rev 832)
+++ branches/guffert/wingui/dialog/utils.h 2007-11-02 16:37:36 UTC (rev 833)
@@ -6,13 +6,19 @@
#include <sql.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
void ShowDiagnostics ( SQLRETURN nReturn, SQLSMALLINT nHandleType, SQLHANDLE h );
-void FreeEnvHandle ( SQLHENV &hEnv );
-void Disconnect ( SQLHDBC &hDbc, SQLHENV &hEnv );
-void Disconnect ( SQLHSTMT &hStmt, SQLHDBC &hDbc, SQLHENV &hEnv );
-//const myString & buildConnectString ( DataSource* params );
-SQLRETURN Connect ( SQLHDBC & hDbc, SQLHENV & hEnv, DataSource *
params );
+void FreeEnvHandle ( SQLHENV hEnv );
+void Disconnect ( SQLHDBC hDbc, SQLHENV hEnv );
+SQLRETURN Connect ( SQLHDBC *hDbc, SQLHENV *hEnv, DataSource *params );
unsigned long CompileOptions ( DataSource * params );
void DecompileOptions ( DataSource *src );
+#ifdef __cplusplus
+}
#endif
+
+#endif
Modified: branches/guffert/wingui/myodbc5S.def
===================================================================
--- branches/guffert/wingui/myodbc5S.def 2007-11-01 17:33:36 UTC (rev 832)
+++ branches/guffert/wingui/myodbc5S.def 2007-11-02 16:37:36 UTC (rev 833)
@@ -1,4 +1,5 @@
LIBRARY MYODBC5S.DLL
EXPORTS
ConfigDSNW
+Driver_Prompt
;
Modified: branches/guffert/wingui/odbcdialogparams/odbcdialogparams.cpp
===================================================================
--- branches/guffert/wingui/odbcdialogparams/odbcdialogparams.cpp 2007-11-01 17:33:36 UTC
(rev 832)
+++ branches/guffert/wingui/odbcdialogparams/odbcdialogparams.cpp 2007-11-02 16:37:36 UTC
(rev 833)
@@ -43,6 +43,8 @@
static bool BusyIndicator = false;
static TABCTRL TabCtrl_1;
+/* Whether we are in SQLDriverConnect() prompt mode (used to disable fields) */
+static BOOL g_isPrompt;
HelpButtonPressedCallbackType* gHelpButtonPressedCallback = NULL;
@@ -284,14 +286,14 @@
{
syncData(hwnd, params );
+ if( TabCtrl_1.hTab )
+ syncTabsData(hwnd, params);
+
/* pack option values into bitmap */
unsigned long opts= CompileOptions(pParams);
SQLWCHAR optstr[15];
sqlwcharfromul(optstr, opts);
ds_set_strattr(&pParams->option, optstr);
-
- if( TabCtrl_1.hTab )
- syncTabsData(hwnd, params);
}
void OnDialogClose();
@@ -562,6 +564,13 @@
DecompileOptions( pParams );
syncForm(hwnd,*pParams);
+ /* Disable fields if in prompt mode */
+ if (g_isPrompt)
+ {
+ EnableWindow(GetDlgItem(hwnd, IDC_EDIT_name), FALSE);
+ EnableWindow(GetDlgItem(hwnd, IDC_EDIT_description), FALSE);
+ }
+
BOOL b = DoCreateDialogTooltip();
return 0;
}
@@ -593,13 +602,14 @@
0 if the dialog was closed or cancelled
*/
extern "C"
-int ShowOdbcParamsDialog(DataSource* params, HWND ParentWnd)
+int ShowOdbcParamsDialog(DataSource* params, HWND ParentWnd, BOOL isPrompt)
{
assert(!BusyIndicator);
InitStaticValues();
pParams= params;
pCaption= L"Dialog";
+ g_isPrompt= isPrompt;
DialogBox(ghInstance, MAKEINTRESOURCE(IDD_DIALOG1), ParentWnd,
(DLGPROC)FormMain_DlgProc);
Modified: branches/guffert/wingui/odbcdialogparams/odbcdialogparams.h
===================================================================
--- branches/guffert/wingui/odbcdialogparams/odbcdialogparams.h 2007-11-01 17:33:36 UTC
(rev 832)
+++ branches/guffert/wingui/odbcdialogparams/odbcdialogparams.h 2007-11-02 16:37:36 UTC
(rev 833)
@@ -22,7 +22,8 @@
// returns TRUE if user pressed OK, FALSE - otherwise
int ShowOdbcParamsDialog(
DataSource* params, /*[inout] params */
- HWND ParentWnd); /* [in] could be NULL */
+ HWND ParentWnd, /* [in] could be NULL */
+ BOOL isPrompt);
#ifdef __cplusplus
}
| Thread |
|---|
| • Connector/ODBC 3.51 commit: r833 - in branches/guffert: driver util wingui wingui/dialog wingui/odbcdialogparams | jbalint | 2 Nov |