1 /************************************************************************************ 2 Copyright (C) 2013, 2019 MariaDB Corporation AB 3 4 This library is free software; you can redistribute it and/or 5 modify it under the terms of the GNU Library General Public 6 License as published by the Free Software Foundation; either 7 version 2.1 of the License, or (at your option) any later version. 8 9 This library is distributed in the hope that it will be useful, 10 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 Library General Public License for more details. 13 14 You should have received a copy of the GNU Library General Public 15 License along with this library; if not see <http://www.gnu.org/licenses> 16 or write to the Free Software Foundation, Inc., 17 51 Franklin St., Fifth Floor, Boston, MA 02110, USA 18 *************************************************************************************/ 19 #ifndef _ma_statement_h_ 20 #define _ma_statement_h_ 21 22 #include "ma_catalog.h" 23 24 #define MADB_FETCH_TYPE_FETCH 1 25 #define MADB_FETCH_TYPE_BULK 2 26 #define MADB_FETCH_TYPE_SETPOS 3 27 28 29 struct st_ma_stmt_methods 30 { 31 SQLRETURN (*Prepare)(MADB_Stmt *Stmt, char *StatementText, SQLINTEGER TextLength, BOOL ExecDirect); 32 SQLRETURN (*Execute)(MADB_Stmt *Stmt, BOOL ExecDirect); 33 SQLRETURN (*Fetch)(MADB_Stmt *Stmt); 34 SQLRETURN (*BindColumn)(MADB_Stmt *Stmt, SQLUSMALLINT ColumnNumber, SQLSMALLINT TargetType, 35 SQLPOINTER TargetValuePtr, SQLLEN BufferLength, SQLLEN *StrLen_or_Ind); 36 SQLRETURN (*BindParam)(MADB_Stmt *Stmt, SQLUSMALLINT ParameterNumber, SQLSMALLINT InputOutputType, SQLSMALLINT ValueType, 37 SQLSMALLINT ParameterType, SQLULEN ColumnSize, SQLSMALLINT DecimalDigits, SQLPOINTER ParameterValuePtr, 38 SQLLEN BufferLength, SQLLEN *StrLen_or_IndPtr); 39 SQLRETURN (*ExecDirect)(MADB_Stmt *Stmt, char *StatementText, SQLINTEGER TextLength); 40 SQLRETURN (*GetData)(SQLHSTMT StatementHandle, SQLUSMALLINT Col_or_Param_Num, SQLSMALLINT TargetType, 41 SQLPOINTER TargetValuePtr, SQLLEN BufferLength, SQLLEN * StrLen_or_IndPtr, BOOL InternalUse); 42 SQLRETURN (*RowCount)(MADB_Stmt *Stmt, SQLLEN *RowCountPtr); 43 SQLRETURN (*ParamCount)(MADB_Stmt *Stmt, SQLSMALLINT *ParamCountPtr); 44 SQLRETURN (*ColumnCount)(MADB_Stmt *Stmt, SQLSMALLINT *ColumnCountPtr); 45 SQLRETURN (*GetAttr)(MADB_Stmt *Stmt, SQLINTEGER Attribute, SQLPOINTER Value, SQLINTEGER BufferLength, 46 SQLINTEGER *StringLength); 47 SQLRETURN (*SetAttr)(MADB_Stmt *Stmt, SQLINTEGER Attribute, SQLPOINTER ValuePtr, SQLINTEGER StringLength); 48 SQLRETURN (*StmtFree)(MADB_Stmt *Stmt, SQLUSMALLINT Option); 49 SQLRETURN (*ColAttribute)(MADB_Stmt *Stmt, SQLUSMALLINT ColumnNumber, SQLUSMALLINT FieldIdentifier, SQLPOINTER CharacterAttributePtr, 50 SQLSMALLINT BufferLength, SQLSMALLINT *StringLengthPtr, SQLLEN *NumericAttributePtr, 51 my_bool isWchar); 52 SQLRETURN (*ColumnPrivileges)(MADB_Stmt *Stmt, char *CatalogName, SQLSMALLINT NameLength1, 53 char *SchemaName, SQLSMALLINT NameLength2, char *TableName, 54 SQLSMALLINT NameLength3, char *ColumnName, SQLSMALLINT NameLength4); 55 SQLRETURN (*TablePrivileges)(MADB_Stmt *Stmt, char *CatalogName, SQLSMALLINT NameLength1, 56 char *SchemaName, SQLSMALLINT NameLength2, 57 char *TableName, SQLSMALLINT NameLength3); 58 SQLRETURN (*Tables)(MADB_Stmt *Stmt, char *CatalogName, SQLSMALLINT NameLength1, 59 char *SchemaName, SQLSMALLINT NameLength2, char *TableName, 60 SQLSMALLINT NameLength3, char *TableType, SQLSMALLINT NameLength4); 61 SQLRETURN (*Statistics)(MADB_Stmt *Stmt, char *CatalogName, SQLSMALLINT NameLength1, 62 char *SchemaName, SQLSMALLINT NameLength2, 63 char *TableName, SQLSMALLINT NameLength3, 64 SQLUSMALLINT Unique, SQLUSMALLINT Reserved); 65 SQLRETURN (*Columns)(MADB_Stmt *Stmt, char *CatalogName, SQLSMALLINT NameLength1, 66 char *SchemaName, SQLSMALLINT NameLength2, 67 char *TableName, SQLSMALLINT NameLength3, 68 char *ColumnName, SQLSMALLINT NameLength4); 69 SQLRETURN (*ProcedureColumns)(MADB_Stmt *Stmt, char *CatalogName, SQLSMALLINT NameLength1, 70 char *SchemaName, SQLSMALLINT NameLength2, char *ProcName, 71 SQLSMALLINT NameLength3, char *ColumnName, SQLSMALLINT NameLength4); 72 SQLRETURN (*PrimaryKeys)(MADB_Stmt *Stmt, char *CatalogName, SQLSMALLINT NameLength1, 73 char *SchemaName, SQLSMALLINT NameLength2, char *TableName, 74 SQLSMALLINT NameLength3); 75 SQLRETURN (*SpecialColumns)(MADB_Stmt *Stmt, SQLUSMALLINT IdentifierType, 76 char *CatalogName, SQLSMALLINT NameLength1, 77 char *SchemaName, SQLSMALLINT NameLength2, 78 char *TableName, SQLSMALLINT NameLength3, 79 SQLUSMALLINT Scope, SQLUSMALLINT Nullable); 80 SQLRETURN (*Procedures)(MADB_Stmt *Stmt, char *CatalogName, SQLSMALLINT NameLength1, 81 char *SchemaName, SQLSMALLINT NameLength2, char *ProcName, 82 SQLSMALLINT NameLength3); 83 SQLRETURN (*ForeignKeys)(MADB_Stmt *Stmt, char *PKCatalogName, SQLSMALLINT NameLength1, 84 char *PKSchemaName, SQLSMALLINT NameLength2, char *PKTableName, 85 SQLSMALLINT NameLength3, char *FKCatalogName, SQLSMALLINT NameLength4, 86 char *FKSchemaName, SQLSMALLINT NameLength5, char *FKTableName, 87 SQLSMALLINT NameLength6); 88 SQLRETURN (*DescribeCol)(MADB_Stmt *Stmt, SQLUSMALLINT ColumnNumber, void *ColumnName, 89 SQLSMALLINT BufferLength, SQLSMALLINT *NameLengthPtr, 90 SQLSMALLINT *DataTypePtr, SQLULEN *ColumnSizePtr, SQLSMALLINT *DecimalDigitsPtr, 91 SQLSMALLINT *NullablePtr, my_bool isWChar); 92 SQLRETURN (*SetCursorName)(MADB_Stmt *Stmt, char *Buffer, SQLINTEGER BufferLength); 93 SQLRETURN (*GetCursorName)(MADB_Stmt *Stmt, void *CursorName, SQLSMALLINT BufferLength, 94 SQLSMALLINT *NameLengthPtr, my_bool isWChar); 95 SQLRETURN (*SetPos)(MADB_Stmt *Stmt, SQLSETPOSIROW Row, SQLUSMALLINT Operation, 96 SQLUSMALLINT LockType, int ArrayOffset); 97 SQLRETURN (*FetchScroll)(MADB_Stmt *Stmt, SQLSMALLINT FetchOrientation, 98 SQLLEN FetchOffset); 99 SQLRETURN (*ParamData)(MADB_Stmt *Stmt, SQLPOINTER *ValuePtrPtr); 100 SQLRETURN (*PutData)(MADB_Stmt *Stmt, SQLPOINTER DataPtr, SQLLEN StrLen_or_Ind); 101 SQLRETURN (*BulkOperations)(MADB_Stmt *Stmt, SQLSMALLINT Operation); 102 SQLRETURN (*RefreshDynamicCursor)(MADB_Stmt *Stmt); 103 SQLRETURN (*RefreshRowPtrs)(MADB_Stmt *Stmt); 104 SQLRETURN (*GetOutParams)(MADB_Stmt *Stmt, int CurrentOffset); 105 }; 106 107 SQLRETURN MADB_StmtInit (MADB_Dbc *Connection, SQLHANDLE *pHStmt); 108 SQLUSMALLINT MapColAttributeDescType(SQLUSMALLINT FieldIdentifier); 109 MYSQL_RES* FetchMetadata (MADB_Stmt *Stmt); 110 SQLRETURN MADB_DoExecute(MADB_Stmt *Stmt, BOOL ExecDirect); 111 112 #define MADB_MAX_CURSOR_NAME 64 * 4 + 1 113 #define MADB_CHECK_STMT_HANDLE(a,b)\ 114 if (!(a) || !(a)->b)\ 115 return SQL_INVALID_HANDLE 116 117 #define MADB_STMT_COLUMN_COUNT(aStmt) (aStmt)->Ird->Header.Count 118 #define MADB_RESET_COLUMT_COUNT(aStmt) (aStmt)->Ird->Header.Count= 0 119 #define MADB_STMT_PARAM_COUNT(aStmt) (aStmt)->ParamCount 120 #define MADB_POSITIONED_COMMAND(aStmt) ((aStmt)->PositionedCommand && (aStmt)->PositionedCursor) 121 /* So far we always use all fields for index. Once that is changed, this should be changed as well */ 122 #define MADB_POS_COMM_IDX_FIELD_COUNT(aStmt) MADB_STMT_COLUMN_COUNT((aStmt)->PositionedCursor) 123 #define MADB_STMT_FORGET_NEXT_POS(aStmt) (aStmt)->Cursor.Next= NULL 124 #define MADB_STMT_RESET_CURSOR(aStmt) (aStmt)->Cursor.Position= -1; MADB_STMT_FORGET_NEXT_POS(aStmt) 125 #define MADB_STMT_CLOSE_STMT(aStmt) mysql_stmt_close((aStmt)->stmt);(aStmt)->stmt= NULL 126 127 #endif 128