myodbc.h
上传用户:jmzj888
上传日期:2007-01-02
资源大小:220k
文件大小:5k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /*   This file is public domain and comes with NO WARRANTY of any kind */
  2. #undef LOG_ALL
  3. #define ODBCVER 0x0250 /* ODBC 3.0 has no installer */
  4. #ifdef APSTUDIO_READONLY_SYMBOLS
  5. #define WIN32                   /* Hack for rc files */
  6. #endif
  7. #ifdef __cplusplus
  8. extern "C"
  9. {
  10. #endif
  11. #ifdef RC_INVOKED
  12. #define stdin /* Don't include stdio */
  13. #endif
  14. #include <global.h>
  15. #include <my_sys.h>
  16. #include <mysql.h>
  17. #include <list.h>
  18. #include <m_string.h>
  19. #ifdef __cplusplus
  20. }
  21. #endif
  22. #ifndef _UNIX_
  23. #include <windowsx.h>
  24. #ifndef RC_INVOKED
  25. #pragma pack(1)
  26. #endif
  27. /* #include "w16macro.h" */
  28. #include "sql.h"
  29. #include "sqlext.h"
  30. #endif /* IS NOT UNIX */
  31. #ifdef _UNIX_
  32. #include <isql.h>
  33. #include <isqlext.h>
  34. #include <odbc_types.h>
  35. #include <odbc_funcs.h>
  36. #endif /* IS UNIX */
  37. #ifdef WIN32
  38. #define INTFUNC  __stdcall
  39. #define EXPFUNC  __stdcall
  40. #else
  41. #define INTFUNC PASCAL
  42. #define EXPFUNC __export CALLBACK
  43. #endif
  44. #undef  SQL_SPEC_STRING /* Wrong in VC++ 5.0 */
  45. #define SQL_SPEC_STRING    "02.50" /* String constant for version */
  46. #define DRIVER_VERSION    "2.50.17"
  47. #define MYSQL_RESET_BUFFERS 1000 /* Intern param to SQLFreeStmt */
  48. #define MYSQL_RESET     1001 /* Intern param to SQLFreeStmt */
  49. #define MYSQL_3_21_PROTOCOL 10
  50. #define x_free(A) { gptr tmp=(gptr) (A); if (tmp) my_free(tmp,MYF(MY_WME+MY_FAE)); }
  51. //  Environment information.  This is allocated by "SQLAllocEnv".
  52. typedef struct tagENV {
  53.   short   DummyEntry;
  54. } ENV;
  55. // Database connection information.  This is allocated by "SQLAllocConnect".
  56. #define FLAG_FIELD_LENGTH   1 // field_length instead of max_length
  57. #define FLAG_FOUND_ROWS     2   // Access wants can't handle affected_rows
  58. #define FLAG_DEBUG     4 // Put a debug log on C:myodbc.log
  59. #define FLAG_BIG_PACKETS    8 // Allow BIG packets.
  60. #define FLAG_NO_PROMPT      16  // Don't prompt on connection even if driver request it
  61. #define FLAG_OLD_ODBC_PROG  32  // The program require ODBC 1.0 syntax
  62. #define FLAG_NO_SCHEMA 64
  63. #define FLAG_NO_DEFAULT_CURSOR 128
  64. #define FLAG_NO_FETCH 256
  65. #define FLAG_PAD_SPACE 512  // Pad CHAR fields with space to max length.
  66. typedef struct stmt_options {
  67.   uint bind_type,rows_in_set,cursor_type;
  68.   ulong max_length,max_rows;
  69. } STMT_OPTIONS;
  70. typedef struct tagDBC {
  71.   ENV *env;
  72.   MYSQL mysql;
  73.   char *dsn,*database,*user,*password,*server,sqlstate[5];
  74.   uint port,flag;
  75.   ulong login_timeout;
  76.   LIST *statements;
  77.   STMT_OPTIONS stmt_options;
  78. } DBC;
  79. //  Statment information.  This is allocated by "SQLAllocStmt".
  80. typedef struct st_bind {
  81.   MYSQL_FIELD *field;
  82.   SWORD fCType;
  83.   PTR rgbValue; /* Save data here */
  84.   SDWORD cbValueMax;
  85.   SDWORD FAR *pcbValue;
  86.   LIST list;
  87. } BIND;
  88. typedef struct st_param_bind {
  89.   SWORD SqlType,CType;
  90.   gptr buffer;
  91.   char *pos_in_query,*value;
  92.   SDWORD ValueMax,*actual_len,value_length;
  93.   bool alloced,used;
  94. } PARAM_BIND;
  95. enum MY_STATE { ST_UNKNOWN, ST_PREPARED, ST_PRE_EXECUTED, ST_EXECUTED };
  96. typedef struct tagSTMT {
  97.   DBC FAR *dbc;
  98.   MYSQL_RES *result;
  99.   uint current_row,last_getdata_col;
  100.   ulong getdata_offset;
  101.   uint *order,order_count,param_count,current_param,*result_lengths,
  102.     rows_found_in_set,position_in_set,bound_columns;
  103.   STMT_OPTIONS stmt_options;
  104.   enum MY_STATE state;
  105.   MYSQL_ROW array,result_array,current_values;
  106.   MYSQL_ROW (*fix_fields)(struct tagSTMT FAR* stmt,MYSQL_ROW row);
  107.   MYSQL_FIELD *fields;
  108.   MYSQL_ROW_OFFSET end_of_set; /* end of set for SQLExtendedFetch() */
  109.   DYNAMIC_ARRAY params; /* For SQLBindParamter */
  110.   BIND *bind; /* For SQLBindCol */
  111.   SWORD *odbc_types; /* sql types for fields */
  112.   char *query,*query_end;
  113.   LIST list;
  114. } STMT;
  115. extern HANDLE NEAR s_hModule; // DLL handle.
  116. extern char *default_locale, *decimal_point, *thousands_sep;
  117. extern uint decimal_point_length,thousands_sep_length;
  118. // Resource defines for "SQLDriverConnect" dialog box.
  119. #define ID_LISTBOX 100
  120. #define CONFIGDSN 1001
  121. #define CONFIGDEFAULT 1002
  122. #define EDRIVERCONNECT 1003
  123. RETCODE my_SQLExecute(STMT FAR* stmt);
  124. RETCODE my_SQLPrepare(HSTMT hstmt,UCHAR FAR *szSqlStr, SDWORD cbSqlStr);
  125. /* Functions in utility.c */
  126. void mysql_link_fields(STMT *stmt,MYSQL_FIELD *fields,uint field_count);
  127. void fix_result_types(STMT *stmt);
  128. char *fix_str(char *to,char *from,int length);
  129. char *dupp_str(char *from,int length);
  130. bool empty_str(char *from,int length);
  131. RETCODE copy_result(DBC FAR *dbc,UCHAR FAR *rgbValue,SWORD cbValueMax,
  132.     SWORD FAR *pcbValue,char FAR *src);
  133. RETCODE copy_lresult(DBC FAR *dbc,UCHAR FAR *rgbValue,SDWORD cbValueMax,
  134.      SDWORD FAR *pcbValue,char *src,ulong src_length,
  135.      ulong max_length,ulong fill_length,ulong *offset);
  136. void remove_escape(char *name);
  137. RETCODE set_error(DBC FAR *dbc,char *state,char *message,uint errcode);
  138. int unireg_to_sql_datatype(STMT FAR *stmt, MYSQL_FIELD *field, char *buff,
  139.    ulong *transfer_length,ulong *precision,
  140.    ulong *display_size);
  141. int unireg_to_c_datatype(MYSQL_FIELD *field);
  142. int default_c_type(int sql_data_type);
  143. ulong bind_length(int sql_data_type,ulong length);
  144. my_bool str_to_date(DATE_STRUCT *rgbValue, const char *str,uint length);
  145. ulong str_to_time(const char *str,uint length);
  146. void init_getfunctions(void);
  147. void myodbc_init(void);