|
Packit Service |
17f749 |
/************************************************************************************
|
|
Packit Service |
17f749 |
Copyright (C) 2013,2016 MariaDB Corporation AB
|
|
Packit Service |
17f749 |
|
|
Packit Service |
17f749 |
This library is free software; you can redistribute it and/or
|
|
Packit Service |
17f749 |
modify it under the terms of the GNU Library General Public
|
|
Packit Service |
17f749 |
License as published by the Free Software Foundation; either
|
|
Packit Service |
17f749 |
version 2.1 of the License, or (at your option) any later version.
|
|
Packit Service |
17f749 |
|
|
Packit Service |
17f749 |
This library is distributed in the hope that it will be useful,
|
|
Packit Service |
17f749 |
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit Service |
17f749 |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Packit Service |
17f749 |
Library General Public License for more details.
|
|
Packit Service |
17f749 |
|
|
Packit Service |
17f749 |
You should have received a copy of the GNU Library General Public
|
|
Packit Service |
17f749 |
License along with this library; if not see <http://www.gnu.org/licenses>
|
|
Packit Service |
17f749 |
or write to the Free Software Foundation, Inc.,
|
|
Packit Service |
17f749 |
51 Franklin St., Fifth Floor, Boston, MA 02110, USA
|
|
Packit Service |
17f749 |
*************************************************************************************/
|
|
Packit Service |
17f749 |
#ifndef _ma_odbc_h_
|
|
Packit Service |
17f749 |
#define _ma_odbc_h_
|
|
Packit Service |
17f749 |
|
|
Packit Service |
17f749 |
#include <ma_odbc_version.h>
|
|
Packit Service |
17f749 |
|
|
Packit Service |
17f749 |
#ifdef _WIN32
|
|
Packit Service |
17f749 |
# include "ma_platform_win32.h"
|
|
Packit Service |
17f749 |
#else
|
|
Packit Service |
17f749 |
# include "ma_platform_posix.h"
|
|
Packit Service |
17f749 |
#endif
|
|
Packit Service |
17f749 |
|
|
Packit Service |
17f749 |
#include <stdlib.h>
|
|
Packit Service |
17f749 |
|
|
Packit Bot |
d1ab76 |
#include <mysql/mysql.h>
|
|
Packit Service |
17f749 |
|
|
Packit Service |
17f749 |
#include <ma_legacy_helpers.h>
|
|
Packit Service |
17f749 |
|
|
Packit Service |
17f749 |
#include <sql.h>
|
|
Packit Service |
17f749 |
#include <sqlext.h>
|
|
Packit Service |
17f749 |
#include <odbcinst.h>
|
|
Packit Service |
17f749 |
|
|
Packit Bot |
d1ab76 |
#include <mysql/errmsg.h>
|
|
Packit Service |
17f749 |
#include <string.h>
|
|
Packit Service |
17f749 |
#include <stdio.h>
|
|
Packit Service |
17f749 |
#include <math.h>
|
|
Packit Service |
17f749 |
#include <stddef.h>
|
|
Packit Service |
17f749 |
#include <assert.h>
|
|
Packit Service |
17f749 |
#include <time.h>
|
|
Packit Service |
17f749 |
|
|
Packit Service |
17f749 |
|
|
Packit Service |
17f749 |
typedef struct st_ma_odbc_connection MADB_Dbc;
|
|
Packit Service |
17f749 |
typedef struct st_ma_odbc_stmt MADB_Stmt;
|
|
Packit Service |
17f749 |
|
|
Packit Service |
17f749 |
typedef struct st_ma_odbc_error
|
|
Packit Service |
17f749 |
{
|
|
Packit Service |
17f749 |
char SqlState[SQL_SQLSTATE_SIZE + 1];
|
|
Packit Service |
17f749 |
char SqlStateV2[SQLSTATE_LENGTH + 1];
|
|
Packit Service |
17f749 |
char SqlErrorMsg[SQL_MAX_MESSAGE_LENGTH + 1];
|
|
Packit Service |
17f749 |
SQLRETURN ReturnValue;
|
|
Packit Service |
17f749 |
} MADB_ERROR;
|
|
Packit Service |
17f749 |
|
|
Packit Service |
17f749 |
typedef struct
|
|
Packit Service |
17f749 |
{
|
|
Packit Service |
17f749 |
size_t PrefixLen;
|
|
Packit Service |
17f749 |
MADB_ERROR *ErrRecord;
|
|
Packit Service |
17f749 |
SQLINTEGER NativeError;
|
|
Packit Service |
17f749 |
/* Order number of last requested error record */
|
|
Packit Service |
17f749 |
unsigned int ErrorNum;
|
|
Packit Service |
17f749 |
char SqlState[SQLSTATE_LENGTH + 1];
|
|
Packit Service |
17f749 |
SQLRETURN ReturnValue;
|
|
Packit Service |
17f749 |
char SqlErrorMsg[SQL_MAX_MESSAGE_LENGTH + 1];
|
|
Packit Service |
17f749 |
} MADB_Error;
|
|
Packit Service |
17f749 |
|
|
Packit Service |
17f749 |
typedef struct
|
|
Packit Service |
17f749 |
{
|
|
Packit Service |
17f749 |
SQLUINTEGER TargetType;
|
|
Packit Service |
17f749 |
SQLPOINTER TargetValuePtr;
|
|
Packit Service |
17f749 |
SQLLEN BufferLength;
|
|
Packit Service |
17f749 |
SQLLEN Utf8BufferLength;
|
|
Packit Service |
17f749 |
SQLLEN *StrLen_or_Ind;
|
|
Packit Service |
17f749 |
void *InternalBuffer; /* used for conversion */
|
|
Packit Service |
17f749 |
} MADB_ColBind;
|
|
Packit Service |
17f749 |
|
|
Packit Service |
17f749 |
typedef struct
|
|
Packit Service |
17f749 |
{
|
|
Packit Service |
17f749 |
SQLSMALLINT InputOutputType;
|
|
Packit Service |
17f749 |
SQLSMALLINT ValueType;
|
|
Packit Service |
17f749 |
SQLSMALLINT ParameterType;
|
|
Packit Service |
17f749 |
SQLULEN ColumnSize;
|
|
Packit Service |
17f749 |
SQLSMALLINT DecimalDigits;
|
|
Packit Service |
17f749 |
SQLPOINTER ParameterValuePtr;
|
|
Packit Service |
17f749 |
SQLLEN BufferLength;
|
|
Packit Service |
17f749 |
SQLLEN *StrLen_or_IndPtr;
|
|
Packit Service |
17f749 |
void *InternalBuffer; /* used for conversion */
|
|
Packit Service |
17f749 |
} MADB_ParmBind;
|
|
Packit Service |
17f749 |
|
|
Packit Service |
17f749 |
typedef struct
|
|
Packit Service |
17f749 |
{
|
|
Packit Service |
17f749 |
/* Header */
|
|
Packit Service |
17f749 |
SQLSMALLINT AllocType;
|
|
Packit Service |
17f749 |
SQLULEN ArraySize;
|
|
Packit Service |
17f749 |
SQLUSMALLINT *ArrayStatusPtr;
|
|
Packit Service |
17f749 |
SQLULEN *BindOffsetPtr;
|
|
Packit Service |
17f749 |
SQLULEN BindType;
|
|
Packit Service |
17f749 |
SQLSMALLINT Count;
|
|
Packit Service |
17f749 |
/* TODO: In IPD this is SQLUINTEGER* field */
|
|
Packit Service |
17f749 |
SQLULEN *RowsProcessedPtr;
|
|
Packit Service |
17f749 |
/* Header end */
|
|
Packit Service |
17f749 |
} MADB_Header;
|
|
Packit Service |
17f749 |
|
|
Packit Service |
17f749 |
typedef struct
|
|
Packit Service |
17f749 |
{
|
|
Packit Service |
17f749 |
SQLUINTEGER BindSize; /* size of each structure if using * Row-wise Binding */
|
|
Packit Service |
17f749 |
SQLUSMALLINT *RowOperationPtr;
|
|
Packit Service |
17f749 |
SQLULEN *RowOffsetPtr;
|
|
Packit Service |
17f749 |
MADB_ColBind *ColumnBind;
|
|
Packit Service |
17f749 |
MYSQL_BIND *Bind;
|
|
Packit Service |
17f749 |
SQLSMALLINT Allocated;
|
|
Packit Service |
17f749 |
} MADB_Ard;
|
|
Packit Service |
17f749 |
|
|
Packit Service |
17f749 |
typedef struct
|
|
Packit Service |
17f749 |
{
|
|
Packit Service |
17f749 |
SQLLEN ParamsetSize;
|
|
Packit Service |
17f749 |
SQLUINTEGER ParamBindType;
|
|
Packit Service |
17f749 |
SQLUSMALLINT *ParamOperationPtr;
|
|
Packit Service |
17f749 |
SQLULEN *ParamOffsetPtr;
|
|
Packit Service |
17f749 |
MADB_ParmBind *ParamBind;
|
|
Packit Service |
17f749 |
MYSQL_BIND *Bind;
|
|
Packit Service |
17f749 |
SQLSMALLINT Allocated;
|
|
Packit Service |
17f749 |
SQLLEN Dummy; /* dummy item to fit APD to ARD */
|
|
Packit Service |
17f749 |
} MADB_Apd;
|
|
Packit Service |
17f749 |
|
|
Packit Service |
17f749 |
typedef struct
|
|
Packit Service |
17f749 |
{
|
|
Packit Service |
17f749 |
MADB_Stmt *stmt;
|
|
Packit Service |
17f749 |
SQLULEN *RowsFetched;
|
|
Packit Service |
17f749 |
SQLUSMALLINT *RowStatusArray;
|
|
Packit Service |
17f749 |
SQLUINTEGER FieldCount;
|
|
Packit Service |
17f749 |
SQLSMALLINT Allocated;
|
|
Packit Service |
17f749 |
MYSQL_FIELD *Fields;
|
|
Packit Service |
17f749 |
} MADB_Ird;
|
|
Packit Service |
17f749 |
|
|
Packit Service |
17f749 |
typedef struct
|
|
Packit Service |
17f749 |
{
|
|
Packit Service |
17f749 |
MADB_Header Header;
|
|
Packit Service |
17f749 |
#if (ODBCVER >= 0x0300)
|
|
Packit Service |
17f749 |
SQLUINTEGER *ParamProcessedPtr;
|
|
Packit Service |
17f749 |
#else
|
|
Packit Service |
17f749 |
SQLULEN *ParamProcessedPtr; /* SQLParamOptions */
|
|
Packit Service |
17f749 |
#endif /* ODBCVER */
|
|
Packit Service |
17f749 |
SQLUSMALLINT *ParamStatusPtr;
|
|
Packit Service |
17f749 |
SQLSMALLINT Allocated;
|
|
Packit Service |
17f749 |
MADB_ParmBind *Parameters;
|
|
Packit Service |
17f749 |
} MADB_Ipd;
|
|
Packit Service |
17f749 |
|
|
Packit Service |
17f749 |
typedef struct {
|
|
Packit Service |
17f749 |
SQLINTEGER AutoUniqueValue;
|
|
Packit Service |
17f749 |
char *BaseCatalogName;
|
|
Packit Service |
17f749 |
char *BaseColumnName;
|
|
Packit Service |
17f749 |
char *BaseTableName;
|
|
Packit Service |
17f749 |
SQLINTEGER CaseSensitive;
|
|
Packit Service |
17f749 |
char *CatalogName;
|
|
Packit Service |
17f749 |
char *ColumnName;
|
|
Packit Service |
17f749 |
SQLSMALLINT ConciseType;
|
|
Packit Service |
17f749 |
SQLPOINTER DataPtr;
|
|
Packit Service |
17f749 |
SQLSMALLINT DateTimeIntervalCode;
|
|
Packit Service |
17f749 |
SQLINTEGER DateTimeIntervalPrecision;
|
|
Packit Service |
17f749 |
SQLINTEGER DescLength;
|
|
Packit Service |
17f749 |
SQLLEN DisplaySize;
|
|
Packit Service |
17f749 |
SQLSMALLINT FixedPrecScale;
|
|
Packit Service |
17f749 |
SQLLEN *IndicatorPtr;
|
|
Packit Service |
17f749 |
char *Label;
|
|
Packit Service |
17f749 |
SQLULEN Length;
|
|
Packit Service |
17f749 |
char *LiteralPrefix;
|
|
Packit Service |
17f749 |
char *LiteralSuffix;
|
|
Packit Service |
17f749 |
char *LocalTypeName;
|
|
Packit Service |
17f749 |
SQLSMALLINT Nullable;
|
|
Packit Service |
17f749 |
SQLINTEGER NumPrecRadix;
|
|
Packit Service |
17f749 |
SQLLEN OctetLength;
|
|
Packit Service |
17f749 |
SQLLEN *OctetLengthPtr;
|
|
Packit Service |
17f749 |
SQLSMALLINT ParameterType;
|
|
Packit Service |
17f749 |
SQLSMALLINT Precision;
|
|
Packit Service |
17f749 |
SQLSMALLINT RowVer;
|
|
Packit Service |
17f749 |
SQLSMALLINT Scale;
|
|
Packit Service |
17f749 |
char *SchemaName;
|
|
Packit Service |
17f749 |
SQLSMALLINT Searchable;
|
|
Packit Service |
17f749 |
char *TableName;
|
|
Packit Service |
17f749 |
SQLSMALLINT Type;
|
|
Packit Service |
17f749 |
char *TypeName;
|
|
Packit Service |
17f749 |
SQLSMALLINT Unnamed;
|
|
Packit Service |
17f749 |
SQLSMALLINT Unsigned;
|
|
Packit Service |
17f749 |
SQLSMALLINT Updateable;
|
|
Packit Service |
17f749 |
unsigned long InternalLength; /* This to be used in the MYSQL_BIND. Thus is the type */
|
|
Packit Service |
17f749 |
char *InternalBuffer; /* used for internal conversion */
|
|
Packit Service |
17f749 |
char *DefaultValue;
|
|
Packit Service |
17f749 |
char *DaeData;
|
|
Packit Service |
17f749 |
SQLULEN DaeDataLength; /* Doesn't seem to be used anywhere */
|
|
Packit Service |
17f749 |
my_bool PutData;
|
|
Packit Service |
17f749 |
my_bool inUse;
|
|
Packit Service |
17f749 |
my_bool TruncError;
|
|
Packit Service |
17f749 |
} MADB_DescRecord;
|
|
Packit Service |
17f749 |
|
|
Packit Service |
17f749 |
typedef struct
|
|
Packit Service |
17f749 |
{
|
|
Packit Service |
17f749 |
MADB_Header Header;
|
|
Packit Service |
17f749 |
SQLINTEGER DescType; /* SQL_ATTR_APP_ROW_DESC or SQL_ATTR_APP_PARAM_DESC */
|
|
Packit Service |
17f749 |
my_bool AppType; /* Allocated by Application ? */
|
|
Packit Service |
17f749 |
MADB_DynArray Records;
|
|
Packit Service |
17f749 |
MADB_DynArray Stmts;
|
|
Packit Service |
17f749 |
MADB_Error Error;
|
|
Packit Service |
17f749 |
MADB_Dbc * Dbc; /* Disconnect must automatically free allocated descriptors. Thus
|
|
Packit Service |
17f749 |
descriptor has to know the connection it is allocated on */
|
|
Packit Service |
17f749 |
MADB_List ListItem; /* To store in the dbc */
|
|
Packit Service |
17f749 |
union {
|
|
Packit Service |
17f749 |
MADB_Ard Ard;
|
|
Packit Service |
17f749 |
MADB_Apd Apd;
|
|
Packit Service |
17f749 |
MADB_Ipd Ipd;
|
|
Packit Service |
17f749 |
MADB_Ird Ird;
|
|
Packit Service |
17f749 |
} Fields;
|
|
Packit Service |
17f749 |
} MADB_Desc;
|
|
Packit Service |
17f749 |
|
|
Packit Service |
17f749 |
struct st_ma_desc_fldid
|
|
Packit Service |
17f749 |
{
|
|
Packit Service |
17f749 |
SQLSMALLINT FieldIdentifier;
|
|
Packit Service |
17f749 |
SQLSMALLINT Access[4];
|
|
Packit Service |
17f749 |
};
|
|
Packit Service |
17f749 |
|
|
Packit Service |
17f749 |
struct st_ma_stmt_methods;
|
|
Packit Service |
17f749 |
|
|
Packit Service |
17f749 |
typedef struct
|
|
Packit Service |
17f749 |
{
|
|
Packit Service |
17f749 |
SQLLEN MaxRows;
|
|
Packit Service |
17f749 |
SQLLEN MaxLength;
|
|
Packit Service |
17f749 |
SQLLEN KeysetSize;
|
|
Packit Service |
17f749 |
SQLUINTEGER CursorType;
|
|
Packit Service |
17f749 |
SQLUINTEGER ScrollConcurrency;
|
|
Packit Service |
17f749 |
SQLUINTEGER RetrieveData;
|
|
Packit Service |
17f749 |
SQLUINTEGER UseBookmarks;
|
|
Packit Service |
17f749 |
void* BookmarkPtr;
|
|
Packit Service |
17f749 |
SQLLEN BookmarkLength;
|
|
Packit Service |
17f749 |
SQLSMALLINT BookmarkType;
|
|
Packit Service |
17f749 |
SQLULEN MetadataId;
|
|
Packit Service |
17f749 |
SQLULEN SimulateCursor;
|
|
Packit Service |
17f749 |
} MADB_StmtOptions;
|
|
Packit Service |
17f749 |
|
|
Packit Service |
17f749 |
/* TODO: To check is it 0 or 1 based? not quite clear from its usage */
|
|
Packit Service |
17f749 |
typedef struct
|
|
Packit Service |
17f749 |
{
|
|
Packit Service |
17f749 |
char *Name;
|
|
Packit Service |
17f749 |
SQLLEN Position;
|
|
Packit Service |
17f749 |
SQLLEN RowsetSize;
|
|
Packit Service |
17f749 |
MYSQL_ROW_OFFSET Next;
|
|
Packit Service |
17f749 |
} MADB_Cursor;
|
|
Packit Service |
17f749 |
|
|
Packit Service |
17f749 |
enum MADB_DaeType {MADB_DAE_NORMAL=0, MADB_DAE_ADD=1, MADB_DAE_UPDATE=2, MADB_DAE_DELETE=3};
|
|
Packit Service |
17f749 |
|
|
Packit Service |
17f749 |
#define RESET_DAE_STATUS(Stmt_Hndl) (Stmt_Hndl)->Status=0; (Stmt_Hndl)->PutParam= -1
|
|
Packit Service |
17f749 |
#define MARK_DAE_DONE(Stmt_Hndl) (Stmt_Hndl)->Status=0; (Stmt_Hndl)->PutParam= (Stmt_Hndl)->ParamCount
|
|
Packit Service |
17f749 |
|
|
Packit Service |
17f749 |
#define PARAM_IS_DAE(Len_Ptr) ((Len_Ptr) && (*(Len_Ptr) == SQL_DATA_AT_EXEC || *(Len_Ptr) <= SQL_LEN_DATA_AT_EXEC_OFFSET))
|
|
Packit Service |
17f749 |
#define DAE_DONE(Stmt_Hndl) ((Stmt_Hndl)->PutParam >= (Stmt_Hndl)->ParamCount)
|
|
Packit Service |
17f749 |
|
|
Packit Service |
17f749 |
enum MADB_StmtState {MADB_SS_INITED= 0, MADB_SS_EMULATED= 1, MADB_SS_PREPARED= 2, MADB_SS_EXECUTED= 3, MADB_SS_OUTPARAMSFETCHED= 4};
|
|
Packit Service |
17f749 |
|
|
Packit Service |
17f749 |
#define STMT_WAS_PREPARED(Stmt_Hndl) (Stmt_Hndl->State >= MADB_SS_EMULATED)
|
|
Packit Service |
17f749 |
#define RESET_STMT_STATE(Stmt_Hndl) Stmt_Hndl->State= STMT_WAS_PREPARED(Stmt_Hndl) ?\
|
|
Packit Service |
17f749 |
(Stmt_Hndl->State == MADB_SS_EMULATED ? MADB_SS_EMULATED : MADB_SS_PREPARED) :\
|
|
Packit Service |
17f749 |
MADB_SS_INITED
|
|
Packit Service |
17f749 |
|
|
Packit Service |
17f749 |
/* Struct used to define column type when driver has to fix it (in catalog functions + SQLGetTypeInfo) */
|
|
Packit Service |
17f749 |
typedef struct
|
|
Packit Service |
17f749 |
{
|
|
Packit Service |
17f749 |
SQLSMALLINT SqlType;
|
|
Packit Service |
17f749 |
my_bool Unsigned;
|
|
Packit Service |
17f749 |
SQLSMALLINT Nullable;
|
|
Packit Service |
17f749 |
SQLLEN OctetLength;
|
|
Packit Service |
17f749 |
|
|
Packit Service |
17f749 |
} MADB_ShortTypeInfo;
|
|
Packit Service |
17f749 |
|
|
Packit Service |
17f749 |
typedef struct
|
|
Packit Service |
17f749 |
{
|
|
Packit Service |
17f749 |
unsigned int ArraySize;
|
|
Packit Service |
17f749 |
my_bool HasRowsToSkip;
|
|
Packit Service |
17f749 |
|
|
Packit Service |
17f749 |
} MADB_BulkOperationInfo;
|
|
Packit Service |
17f749 |
|
|
Packit Service |
17f749 |
/* Stmt struct needs definitions from my_parse.h */
|
|
Packit Service |
17f749 |
#include <ma_parse.h>
|
|
Packit Service |
17f749 |
|
|
Packit Service |
17f749 |
#define STMT_STRING(STMT) (STMT)->Query.Original
|
|
Packit Service |
17f749 |
|
|
Packit Service |
17f749 |
struct st_ma_odbc_stmt
|
|
Packit Service |
17f749 |
{
|
|
Packit Service |
17f749 |
MADB_Dbc *Connection;
|
|
Packit Service |
17f749 |
struct st_ma_stmt_methods *Methods;
|
|
Packit Service |
17f749 |
MADB_StmtOptions Options;
|
|
Packit Service |
17f749 |
MADB_Error Error;
|
|
Packit Service |
17f749 |
MADB_Cursor Cursor;
|
|
Packit Service |
17f749 |
MYSQL_STMT *stmt;
|
|
Packit Service |
17f749 |
MYSQL_RES *metadata;
|
|
Packit Service |
17f749 |
MADB_List ListItem;
|
|
Packit Service |
17f749 |
MADB_QUERY Query;
|
|
Packit Service |
17f749 |
SQLSMALLINT ParamCount;
|
|
Packit Service |
17f749 |
enum MADB_DaeType DataExecutionType;
|
|
Packit Service |
17f749 |
MYSQL_RES *DefaultsResult;
|
|
Packit Service |
17f749 |
int ArrayOffset;
|
|
Packit Service |
17f749 |
SQLSETPOSIROW DaeRowNumber;
|
|
Packit Service |
17f749 |
int Status;
|
|
Packit Service |
17f749 |
MADB_DescRecord *PutDataRec;
|
|
Packit Service |
17f749 |
MADB_Stmt *DaeStmt;
|
|
Packit Service |
17f749 |
MADB_Stmt *PositionedCursor;
|
|
Packit Service |
17f749 |
my_bool PositionedCommand;
|
|
Packit Service |
17f749 |
enum MADB_StmtState State;
|
|
Packit Service |
17f749 |
MYSQL_STMT **MultiStmts;
|
|
Packit Service |
17f749 |
unsigned int MultiStmtNr;
|
|
Packit Service |
17f749 |
unsigned int MultiStmtMaxParam;
|
|
Packit Service |
17f749 |
SQLLEN LastRowFetched;
|
|
Packit Service |
17f749 |
MYSQL_BIND *result;
|
|
Packit Service |
17f749 |
MYSQL_BIND *params;
|
|
Packit Service |
17f749 |
int PutParam;
|
|
Packit Service |
17f749 |
my_bool RebindParams;
|
|
Packit Service |
17f749 |
my_bool bind_done;
|
|
Packit Service |
17f749 |
long long AffectedRows;
|
|
Packit Service |
17f749 |
unsigned long *CharOffset;
|
|
Packit Service |
17f749 |
unsigned long *Lengths;
|
|
Packit Service |
17f749 |
char *TableName;
|
|
Packit Service |
17f749 |
char *CatalogName;
|
|
Packit Service |
17f749 |
MADB_ShortTypeInfo *ColsTypeFixArr;
|
|
Packit Service |
17f749 |
MADB_BulkOperationInfo Bulk;
|
|
Packit Service |
17f749 |
/* Application Descriptors */
|
|
Packit Service |
17f749 |
MADB_Desc *Apd;
|
|
Packit Service |
17f749 |
MADB_Desc *Ard;
|
|
Packit Service |
17f749 |
MADB_Desc *Ird;
|
|
Packit Service |
17f749 |
MADB_Desc *Ipd;
|
|
Packit Service |
17f749 |
/* Internal Descriptors */
|
|
Packit Service |
17f749 |
MADB_Desc *IApd;
|
|
Packit Service |
17f749 |
MADB_Desc *IArd;
|
|
Packit Service |
17f749 |
MADB_Desc *IIrd;
|
|
Packit Service |
17f749 |
MADB_Desc *IIpd;
|
|
Packit Service |
17f749 |
};
|
|
Packit Service |
17f749 |
|
|
Packit Service |
17f749 |
enum MADB_AppType{
|
|
Packit Service |
17f749 |
ATypeGeneral= 0,
|
|
Packit Service |
17f749 |
ATypeMSAccess= 1
|
|
Packit Service |
17f749 |
};
|
|
Packit Service |
17f749 |
|
|
Packit Service |
17f749 |
typedef struct st_ma_odbc_environment {
|
|
Packit Service |
17f749 |
MADB_Error Error;
|
|
Packit Service |
17f749 |
CRITICAL_SECTION cs;
|
|
Packit Service |
17f749 |
MADB_List *Dbcs;
|
|
Packit Service |
17f749 |
SQLWCHAR *TraceFile;
|
|
Packit Service |
17f749 |
SQLUINTEGER Trace;
|
|
Packit Service |
17f749 |
SQLINTEGER OdbcVersion;
|
|
Packit Service |
17f749 |
SQLINTEGER OutputNTS;
|
|
Packit Service |
17f749 |
enum MADB_AppType AppType;
|
|
Packit Service |
17f749 |
} MADB_Env;
|
|
Packit Service |
17f749 |
|
|
Packit Service |
17f749 |
//const size_t sizeOfT = sizeof(MADB_Env);
|
|
Packit Service |
17f749 |
|
|
Packit Service |
17f749 |
#include <ma_dsn.h>
|
|
Packit Service |
17f749 |
|
|
Packit Service |
17f749 |
|
|
Packit Service |
17f749 |
typedef struct st_client_charset
|
|
Packit Service |
17f749 |
{
|
|
Packit Service |
17f749 |
unsigned int CodePage;
|
|
Packit Service |
17f749 |
MARIADB_CHARSET_INFO *cs_info;
|
|
Packit Service |
17f749 |
} Client_Charset;
|
|
Packit Service |
17f749 |
|
|
Packit Service |
17f749 |
struct st_ma_odbc_connection
|
|
Packit Service |
17f749 |
{
|
|
Packit Service |
17f749 |
MYSQL *mariadb; /* handle to a mariadb connection */
|
|
Packit Service |
17f749 |
CRITICAL_SECTION cs; /* mutex for mariadb handle, i.e. for server communications */
|
|
Packit Service |
17f749 |
CRITICAL_SECTION ListsCs; /* for operations with lists */
|
|
Packit Service |
17f749 |
MADB_Env *Environment; /* global environment */
|
|
Packit Service |
17f749 |
MADB_Dsn *Dsn;
|
|
Packit Service |
17f749 |
struct st_ma_connection_methods *Methods;
|
|
Packit Service |
17f749 |
MADB_Error Error;
|
|
Packit Service |
17f749 |
|
|
Packit Service |
17f749 |
Client_Charset Charset;
|
|
Packit Service |
17f749 |
Client_Charset *ConnOrSrcCharset; /* "Source" here stands for which charset Windows DM was using as source, when converted to unicode.
|
|
Packit Service |
17f749 |
We have to use same charset to recode from unicode to get same string as application sent it.
|
|
Packit Service |
17f749 |
For Unicode application that is the same as "Charset", or in case of ANSI on Windows - defaulst system codepage */
|
|
Packit Service |
17f749 |
char *DataBase;
|
|
Packit Service |
17f749 |
MADB_List ListItem;
|
|
Packit Service |
17f749 |
MADB_List *Stmts;
|
|
Packit Service |
17f749 |
MADB_List *Descrs;
|
|
Packit Service |
17f749 |
/* Attributes */
|
|
Packit Service |
17f749 |
SQLINTEGER AccessMode;
|
|
Packit Service |
17f749 |
my_bool IsAnsi;
|
|
Packit Service |
17f749 |
SQLINTEGER IsolationLevel; /* tx_isolation */
|
|
Packit Service |
17f749 |
SQLULEN AsyncEnable;
|
|
Packit Service |
17f749 |
SQLUINTEGER AutoIpd;
|
|
Packit Service |
17f749 |
SQLUINTEGER AutoCommit;
|
|
Packit Service |
17f749 |
SQLUINTEGER ConnectionDead;
|
|
Packit Service |
17f749 |
SQLUINTEGER ConnectionTimeout;
|
|
Packit Service |
17f749 |
unsigned long Options;
|
|
Packit Service |
17f749 |
char *CatalogName;
|
|
Packit Service |
17f749 |
SQLPOINTER EnlistInDtc;
|
|
Packit Service |
17f749 |
SQLUINTEGER LoginTimeout;
|
|
Packit Service |
17f749 |
SQLUINTEGER MetadataId;
|
|
Packit Service |
17f749 |
SQLULEN OdbcCursors;
|
|
Packit Service |
17f749 |
SQLUINTEGER PacketSize;
|
|
Packit Service |
17f749 |
HWND QuietMode;
|
|
Packit Service |
17f749 |
SQLUINTEGER Trace;
|
|
Packit Service |
17f749 |
char *TraceFile;
|
|
Packit Service |
17f749 |
SQLINTEGER TxnIsolation;
|
|
Packit Service |
17f749 |
SQLINTEGER CursorCount;
|
|
Packit Service |
17f749 |
char ServerCapabilities;
|
|
Packit Service |
17f749 |
};
|
|
Packit Service |
17f749 |
|
|
Packit Service |
17f749 |
typedef BOOL (__stdcall *PromptDSN)(HWND hwnd, MADB_Dsn *Dsn);
|
|
Packit Service |
17f749 |
|
|
Packit Service |
17f749 |
typedef struct
|
|
Packit Service |
17f749 |
{
|
|
Packit Service |
17f749 |
void *LibraryHandle;
|
|
Packit Service |
17f749 |
PromptDSN Call;
|
|
Packit Service |
17f749 |
} MADB_Prompt;
|
|
Packit Service |
17f749 |
|
|
Packit Service |
17f749 |
#define MADB_PROMPT_NOT_SUPPORTED 1
|
|
Packit Service |
17f749 |
#define MADB_PROMPT_COULDNT_LOAD 2
|
|
Packit Service |
17f749 |
int DSNPrompt_Lookup(MADB_Prompt *prompt, const char *SetupLibName);
|
|
Packit Service |
17f749 |
|
|
Packit Service |
17f749 |
int DSNPrompt_Free (MADB_Prompt *prompt);
|
|
Packit Service |
17f749 |
|
|
Packit Bot |
ff6dbd |
int InitClientCharset (Client_Charset *cc, const char *name);
|
|
Packit Bot |
ff6dbd |
void CopyClientCharset (Client_Charset *Src, Client_Charset *Dst);
|
|
Packit Bot |
ff6dbd |
void CloseClientCharset(Client_Charset *cc);
|
|
Packit Service |
17f749 |
|
|
Packit Service |
17f749 |
/* Default precision of SQL_NUMERIC */
|
|
Packit Service |
17f749 |
#define MADB_DEFAULT_PRECISION 38
|
|
Packit Bot |
ff6dbd |
#define MADB_MAX_SCALE MADB_DEFAULT_PRECISION
|
|
Packit Service |
17f749 |
#define BINARY_CHARSETNR 63
|
|
Packit Service |
17f749 |
/* Inexistent param id */
|
|
Packit Service |
17f749 |
#define MADB_NOPARAM -1
|
|
Packit Service |
17f749 |
/* Macros to guard communications with the server.
|
|
Packit Service |
17f749 |
TODO: make it(locking) optional depending on designated connection string option */
|
|
Packit Service |
17f749 |
#define LOCK_MARIADB(Dbc) EnterCriticalSection(&(Dbc)->cs)
|
|
Packit Service |
17f749 |
#define UNLOCK_MARIADB(Dbc) LeaveCriticalSection(&(Dbc)->cs)
|
|
Packit Service |
17f749 |
|
|
Packit Service |
17f749 |
/* Enabling tracing */
|
|
Packit Service |
17f749 |
#define MAODBC_DEBUG 1
|
|
Packit Service |
17f749 |
/* Macro checks return of the suplied SQLRETURN function call, checks if it is succeeded, and in case of error pushes error up */
|
|
Packit Service |
17f749 |
#define RETURN_ERROR_OR_CONTINUE(sqlreturn_func_call) {\
|
|
Packit Service |
17f749 |
SQLRETURN rc= (sqlreturn_func_call);\
|
|
Packit Service |
17f749 |
if (!SQL_SUCCEEDED(rc)) return rc;\
|
|
Packit Service |
17f749 |
} while(0)
|
|
Packit Service |
17f749 |
|
|
Packit Service |
17f749 |
#define iOdbc() (sizeof(SQLWCHAR)==4)
|
|
Packit Service |
17f749 |
|
|
Packit Service |
17f749 |
#include <ma_error.h>
|
|
Packit Service |
17f749 |
#include <ma_info.h>
|
|
Packit Service |
17f749 |
#include <ma_environment.h>
|
|
Packit Service |
17f749 |
#include <ma_connection.h>
|
|
Packit Service |
17f749 |
#include <ma_debug.h>
|
|
Packit Service |
17f749 |
#include <ma_desc.h>
|
|
Packit Service |
17f749 |
#include <ma_statement.h>
|
|
Packit Service |
17f749 |
#include <ma_string.h>
|
|
Packit Service |
17f749 |
#include <ma_result.h>
|
|
Packit Service |
17f749 |
#include <ma_driver.h>
|
|
Packit Service |
17f749 |
#include <ma_helper.h>
|
|
Packit Service |
17f749 |
#include <ma_server.h>
|
|
Packit Service |
17f749 |
#include <ma_typeconv.h>
|
|
Packit Service |
17f749 |
#include <ma_bulk.h>
|
|
Packit Service |
17f749 |
|
|
Packit Bot |
ff6dbd |
#include "ma_api_internal.h"
|
|
Packit Service |
17f749 |
|
|
Packit Service |
17f749 |
SQLRETURN MADB_GetBookmark(MADB_Stmt *StatementHandle,
|
|
Packit Service |
17f749 |
SQLSMALLINT TargetType,
|
|
Packit Service |
17f749 |
SQLPOINTER TargetValuePtr,
|
|
Packit Service |
17f749 |
SQLLEN BufferLength,
|
|
Packit Service |
17f749 |
SQLLEN *StrLen_or_IndPtr);
|
|
Packit Service |
17f749 |
|
|
Packit Service |
17f749 |
SQLRETURN MADB_StmtColAttr(MADB_Stmt *Stmt, SQLUSMALLINT ColumnNumber, SQLUSMALLINT FieldIdentifier, SQLPOINTER CharacterAttributePtr,
|
|
Packit Service |
17f749 |
SQLSMALLINT BufferLength, SQLSMALLINT *StringLengthPtr, SQLLEN *NumericAttributePtr, my_bool IsWchar);
|
|
Packit Service |
17f749 |
|
|
Packit Service |
17f749 |
SQLRETURN MADB_StmtColAttr(MADB_Stmt *Stmt, SQLUSMALLINT ColumnNumber, SQLUSMALLINT FieldIdentifier, SQLPOINTER CharacterAttributePtr,
|
|
Packit Service |
17f749 |
SQLSMALLINT BufferLength, SQLSMALLINT *StringLengthPtr, SQLLEN *NumericAttributePtr, my_bool IsWchar);
|
|
Packit Service |
17f749 |
#endif /* _ma_odbc_h_ */
|