blob: 7865af7819fafbb9ade38601dd8e76d6d3505096 [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_TYPE_TRAITS
#define _IGNITE_ODBC_TYPE_TRAITS
#include <stdint.h>
#include <string>
namespace ignite
{
namespace odbc
{
namespace type_traits
{
#ifdef _DEBUG
/**
* Convert statement attribute ID to string containing its name.
* Debug function.
* @param id Attribute ID.
* @return Null-terminated string containing attribute name.
*/
const char* StatementAttrIdToString(long id);
#endif //_DEBUG
/**
* ODBC type aliases.
* We use these so we will not be needed to include system-specific
* headers in our header files.
*/
struct OdbcNativeType
{
enum Type
{
/** Alias for the SQL_C_CHAR type. */
AI_CHAR,
/** Alias for the SQL_C_WCHAR type. */
AI_WCHAR,
/** Alias for the SQL_C_SSHORT type. */
AI_SIGNED_SHORT,
/** Alias for the SQL_C_USHORT type. */
AI_UNSIGNED_SHORT,
/** Alias for the SQL_C_SLONG type. */
AI_SIGNED_LONG,
/** Alias for the SQL_C_ULONG type. */
AI_UNSIGNED_LONG,
/** Alias for the SQL_C_FLOAT type. */
AI_FLOAT,
/** Alias for the SQL_C_DOUBLE type. */
AI_DOUBLE,
/** Alias for the SQL_C_BIT type. */
AI_BIT,
/** Alias for the SQL_C_STINYINT type. */
AI_SIGNED_TINYINT,
/** Alias for the SQL_C_UTINYINT type. */
AI_UNSIGNED_TINYINT,
/** Alias for the SQL_C_SBIGINT type. */
AI_SIGNED_BIGINT,
/** Alias for the SQL_C_UBIGINT type. */
AI_UNSIGNED_BIGINT,
/** Alias for the SQL_C_BINARY type. */
AI_BINARY,
/** Alias for the SQL_C_TDATE type. */
AI_TDATE,
/** Alias for the SQL_C_TTIME type. */
AI_TTIME,
/** Alias for the SQL_C_TTIMESTAMP type. */
AI_TTIMESTAMP,
/** Alias for the SQL_C_NUMERIC type. */
AI_NUMERIC,
/** Alias for the SQL_C_GUID type. */
AI_GUID,
/** Alias for the SQL_DEFAULT. */
AI_DEFAULT,
/** Alias for all unsupported types. */
AI_UNSUPPORTED
};
};
/**
* SQL type name constants.
*/
class SqlTypeName
{
public:
/** VARCHAR SQL type name constant. */
static const std::string VARCHAR;
/** SMALLINT SQL type name constant. */
static const std::string SMALLINT;
/** INTEGER SQL type name constant. */
static const std::string INTEGER;
/** DECIMAL SQL type name constant. */
static const std::string DECIMAL;
/** FLOAT SQL type name constant. */
static const std::string FLOAT;
/** DOUBLE SQL type name constant. */
static const std::string DOUBLE;
/** BIT SQL type name constant. */
static const std::string BIT;
/** TINYINT SQL type name constant. */
static const std::string TINYINT;
/** BIGINT SQL type name constant. */
static const std::string BIGINT;
/** BINARY SQL type name constant. */
static const std::string BINARY;
/** DATE SQL type name constant. */
static const std::string DATE;
/** TIMESTAMP SQL type name constant. */
static const std::string TIMESTAMP;
/** TIME SQL type name constant. */
static const std::string TIME;
/** GUID SQL type name constant. */
static const std::string GUID;
};
/**
* Get SQL type name for the binary type.
*
* @param binaryType Binary type.
* @return Corresponding SQL type name.
*/
const std::string& BinaryTypeToSqlTypeName(int8_t binaryType);
/**
* Check if the C type supported by the current implementation.
*
* @param type Application type.
* @return True if the type is supported.
*/
bool IsApplicationTypeSupported(int16_t type);
/**
* Check if the SQL type supported by the current implementation.
*
* @param type Application type.
* @return True if the type is supported.
*/
bool IsSqlTypeSupported(int16_t type);
/**
* Get corresponding binary type for ODBC SQL type.
*
* @param sqlType SQL type.
* @return Binary type.
*/
int8_t SqlTypeToBinary(int16_t sqlType);
/**
* Convert ODBC type to driver type alias.
*
* @param type ODBC type;
* @return Internal driver type.
*/
OdbcNativeType::Type ToDriverType(int16_t type);
/**
* Convert binary data type to SQL data type.
*
* @param binaryType Binary data type.
* @return SQL data type.
*/
int16_t BinaryToSqlType(int8_t binaryType);
/**
* Get binary type SQL nullability.
*
* @param binaryType Binary data type.
* @return SQL_NO_NULLS if the column could not include NULL values.
* SQL_NULLABLE if the column accepts NULL values.
* SQL_NULLABLE_UNKNOWN if it is not known whether the
* column accepts NULL values.
*/
int16_t BinaryTypeNullability(int8_t binaryType);
/**
* Get SQL type display size.
*
* @param type SQL type.
* @return Display size.
*/
int32_t SqlTypeDisplaySize(int16_t type);
/**
* Get binary type display size.
*
* @param type Binary type.
* @return Display size.
*/
int32_t BinaryTypeDisplaySize(int8_t type);
/**
* Get SQL type column size.
*
* @param type SQL type.
* @return Column size.
*/
int32_t SqlTypeColumnSize(int16_t type);
/**
* Get binary type column size.
*
* @param type Binary type.
* @return Column size.
*/
int32_t BinaryTypeColumnSize(int8_t type);
/**
* Get SQL type transfer octet length.
*
* @param type SQL type.
* @return Transfer octet length.
*/
int32_t SqlTypeTransferLength(int16_t type);
/**
* Get binary type transfer octet length.
*
* @param type Binary type.
* @return Transfer octet length.
*/
int32_t BinaryTypeTransferLength(int8_t type);
/**
* Get SQL type numeric precision radix.
*
* @param type SQL type.
* @return Numeric precision radix.
*/
int32_t SqlTypeNumPrecRadix(int8_t type);
/**
* Get binary type numeric precision radix.
*
* @param type Binary type.
* @return Numeric precision radix.
*/
int32_t BinaryTypeNumPrecRadix(int8_t type);
/**
* Get SQL type decimal digits.
*
* @param type SQL type.
* @return Decimal digits.
*/
int32_t SqlTypeDecimalDigits(int16_t type);
/**
* Get binary type decimal digits.
*
* @param type Binary type.
* @return Decimal digits.
*/
int32_t BinaryTypeDecimalDigits(int8_t type);
/**
* Checks if the SQL type is unsigned.
*
* @param type SQL type.
* @return True if unsigned or non-numeric.
*/
bool SqlTypeUnsigned(int16_t type);
/**
* Checks if the binary type is unsigned.
*
* @param type Binary type.
* @return True if unsigned or non-numeric.
*/
bool BinaryTypeUnsigned(int8_t type);
}
}
}
#endif //_IGNITE_ODBC_TYPE_TRAITS