Blame ma_odbc.h

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_ */