blob: 9241bbc4da8ab50b4d7e48cdc18890d491b8d9af [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef _IGNITE_ODBC_COMMON_TYPES
#define _IGNITE_ODBC_COMMON_TYPES
#include <stdint.h>
#include "system/odbc_constants.h"
namespace ignite
{
namespace odbc
{
typedef SQLLEN SqlLen;
typedef SQLULEN SqlUlen;
/**
* SQL result.
*/
struct SqlResult
{
enum Type
{
/** Success. */
AI_SUCCESS,
/** Success with info. */
AI_SUCCESS_WITH_INFO,
/** Error. */
AI_ERROR,
/** No more data. */
AI_NO_DATA,
/** No more data. */
AI_NEED_DATA
};
};
/**
* Provides detailed information about the cause of a warning or error.
*/
struct SqlState
{
enum Type
{
/** Undefined state. Internal, should never be exposed to user. */
UNKNOWN,
/** Output data has been truncated. */
S01004_DATA_TRUNCATED,
/** Invalid connection string attribute. */
S01S00_INVALID_CONNECTION_STRING_ATTRIBUTE,
/** Error in row. */
S01S01_ERROR_IN_ROW,
/**
* The driver did not support the specified value and
* substituted a similar value.
*/
S01S02_OPTION_VALUE_CHANGED,
/** The numeric or time data returned for a column was truncated. */
S01S07_FRACTIONAL_TRUNCATION,
/** Restricted data type attribute violation. */
S07006_RESTRICTION_VIOLATION,
/** Indicator needed but not suplied. */
S22002_INDICATOR_NEEDED,
/** String data, length mismatch. */
S22026_DATA_LENGTH_MISMATCH,
/** Integrity constraint violation. */
S23000_INTEGRITY_CONSTRAINT_VIOLATION,
/** Invalid cursor state. */
S24000_INVALID_CURSOR_STATE,
/** Invalid transaction state. */
S25000_INVALID_TRANSACTION_STATE,
/** Invalid schema name. */
S3F000_INVALID_SCHEMA_NAME,
/** Serialization failure. */
S40001_SERIALIZATION_FAILURE,
/** Syntax error or access violation. */
S42000_SYNTAX_ERROR_OR_ACCESS_VIOLATION,
/** Base table or view already exists. */
S42S01_TABLE_OR_VIEW_ALREADY_EXISTS,
/** Base table or view not found. */
S42S02_TABLE_OR_VIEW_NOT_FOUND,
/** Index already exists. */
S42S11_INDEX_ALREADY_EXISTS,
/** Index not found. */
S42S12_INDEX_NOT_FOUND,
/** Column already exists. */
S42S21_COLUMN_ALREADY_EXISTS,
/** Column not found. */
S42S22_COLUMN_NOT_FOUND,
/** Invalid descriptor index. */
S07009_INVALID_DESCRIPTOR_INDEX,
/**
* The driver was unable to establish a connection with the data
* source.
*/
S08001_CANNOT_CONNECT,
/**
* The specified ConnectionHandle had already been used
* to establish a connection with a data source, and the connection
* was still open.
*/
S08002_ALREADY_CONNECTED,
/** The connection specified was not open. */
S08003_NOT_CONNECTED,
/** Server rejected the connection. */
S08004_CONNECTION_REJECTED,
/** Communication link failure. */
S08S01_LINK_FAILURE,
/**
* An error occurred for which there was no specific SQLSTATE
* and for which no implementation-specific SQLSTATE was defined.
*/
SHY000_GENERAL_ERROR,
/**
* The driver was unable to allocate memory for the specified
* handle.
*/
SHY001_MEMORY_ALLOCATION,
/**
* The argument TargetType was neither a valid data type
* nor SQL_C_DEFAULT
*/
SHY003_INVALID_APPLICATION_BUFFER_TYPE,
/** Invalid SQL data type. */
SHY004_INVALID_SQL_DATA_TYPE,
/** Invalid use of null pointer. */
SHY009_INVALID_USE_OF_NULL_POINTER,
/** Function sequence error. */
SHY010_SEQUENCE_ERROR,
/**
* Invalid string or buffer length
*/
SHY090_INVALID_STRING_OR_BUFFER_LENGTH,
/**
* Option type was out of range.
*/
SHY092_OPTION_TYPE_OUT_OF_RANGE,
/** Column type out of range. */
SHY097_COLUMN_TYPE_OUT_OF_RANGE,
/** The value specified for the argument InputOutputType was invalid. */
SHY105_INVALID_PARAMETER_TYPE,
/** The value specified for the argument FetchOrientation was invalid. */
SHY106_FETCH_TYPE_OUT_OF_RANGE,
/**
* The driver does not support the feature of ODBC behavior that
* the application requested.
*/
SHYC00_OPTIONAL_FEATURE_NOT_IMPLEMENTED,
/** The timeout period expired before the data source responded to the request. */
SHYT00_TIMEOUT_EXPIRED,
/**
* The connection timeout period expired before the data source
* responded to the request.
*/
SHYT01_CONNECTION_TIMEOUT,
/**
* Driver does not support this function.
*/
SIM001_FUNCTION_NOT_SUPPORTED
};
};
/**
* Diagnostic field type.
*/
struct DiagnosticField
{
enum Type
{
/** Field type is unknown to the driver. */
UNKNOWN,
/** Header record field: Count of rows in the cursor. */
HEADER_CURSOR_ROW_COUNT,
/**
* Header record field: String that describes the SQL statement
* that the underlying function executed.
*/
HEADER_DYNAMIC_FUNCTION,
/**
* Header record field: Numeric code that describes the SQL
* statement that was executed by the underlying function.
*/
HEADER_DYNAMIC_FUNCTION_CODE,
/** Header record field: Number of status records. */
HEADER_NUMBER,
/** Header record field: Last operation return code. */
HEADER_RETURNCODE,
/** Header record field: Row count. */
HEADER_ROW_COUNT,
/** Status record field: Class origin. */
STATUS_CLASS_ORIGIN,
/** Status record field: Column number. */
STATUS_COLUMN_NUMBER,
/** Status record field: Connection name. */
STATUS_CONNECTION_NAME,
/** Status record field: Message text. */
STATUS_MESSAGE_TEXT,
/** Status record field: Native result code. */
STATUS_NATIVE,
/** Status record field: Row number. */
STATUS_ROW_NUMBER,
/** Status record field: Server name. */
STATUS_SERVER_NAME,
/** Status record field: SQLSTATE. */
STATUS_SQLSTATE,
/** Status record field: Subclass origin. */
STATUS_SUBCLASS_ORIGIN
};
};
/**
* Environment attribute.
*/
struct EnvironmentAttribute
{
enum Type
{
/** ODBC attribute is unknown to the driver. */
UNKNOWN,
/** ODBC version. */
ODBC_VERSION,
/** Null-termination of strings. */
OUTPUT_NTS
};
};
struct ResponseStatus
{
enum Type
{
/** Operation completed successfully. */
SUCCESS = 0,
/* 1xxx - parsing errors */
/** Unknown error, or the one without specific code. */
UNKNOWN_ERROR = 1,
/** General parsing error - for the cases when there's no more specific code available. */
PARSING_FAILURE = 1001,
/** Requested operation is not supported. */
UNSUPPORTED_OPERATION = 1002,
/* 2xxx - analysis errors */
/** Code encountered SQL statement of some type that it did not expect in current analysis context. */
UNEXPECTED_OPERATION = 2001,
/** Code encountered SQL expression of some type that it did not expect in current analysis context. */
UNEXPECTED_ELEMENT_TYPE = 2002,
/** Analysis detected that the statement is trying to directly UPDATE key or its fields. */
KEY_UPDATE = 2003,
/* 3xxx - database API related runtime errors */
/** Required table not found. */
TABLE_NOT_FOUND = 3001,
/** Required table does not have a descriptor set. */
NULL_TABLE_DESCRIPTOR = 3002,
/** Statement type does not match that declared by JDBC driver. */
STMT_TYPE_MISMATCH = 3003,
/** DROP TABLE failed. */
TABLE_DROP_FAILED = 3004,
/** Index already exists. */
INDEX_ALREADY_EXISTS = 3005,
/** Index does not exist. */
INDEX_NOT_FOUND = 3006,
/** Required table already exists. */
TABLE_ALREADY_EXISTS = 3007,
/** Required column not found. */
COLUMN_NOT_FOUND = 3008,
/** Required column already exists. */
COLUMN_ALREADY_EXISTS = 3009,
/** Conversion failure. */
CONVERSION_FAILED = 3013,
/* 4xxx - cache related runtime errors */
/** Attempt to INSERT a key that is already in cache. */
DUPLICATE_KEY = 4001,
/** Attempt to UPDATE or DELETE a key whose value has been updated concurrently by someone else. */
CONCURRENT_UPDATE = 4002,
/** Attempt to INSERT or MERGE {@code null} key. */
NULL_KEY = 4003,
/** Attempt to INSERT or MERGE {@code null} value. */
NULL_VALUE = 4004,
/** EntryProcessor has thrown an exception during IgniteCache::invokeAll. */
ENTRY_PROCESSING = 4005,
/** Cache not found. */
CACHE_NOT_FOUND = 4006,
/** Transaction is already completed. */
TRANSACTION_COMPLETED = 5004,
/** Transaction serialization error. */
TRANSACTION_SERIALIZATION_ERROR = 5005
};
};
/**
* Convert internal Ignite type into ODBC SQL return code.
*
* @param result Internal result type.
* @return ODBC result type.
*/
int SqlResultToReturnCode(SqlResult::Type result);
/**
* Convert ODBC field type to internal DiagnosticField::Type type value.
*
* @param field ODBC field type.
* @return Internal DiagnosticField::Type type value.
*/
DiagnosticField::Type DiagnosticFieldToInternal(int16_t field);
/**
* Convert environment attribute to internal EnvironmentAttribute::Type type value.
*
* @param attr Environment attribute.
* @return Internal EnvironmentAttribute::Type type value.
*/
EnvironmentAttribute::Type EnvironmentAttributeToInternal(int32_t attr);
/**
* Convert request response status to SQL state.
*
* @param status Response status.
* @return SQL state.
*/
SqlState::Type ResponseStatusToSqlState(int32_t status);
}
}
#endif //_IGNITE_ODBC_COMMON_TYPES