blob: 72b3cc6602309f4fab822c6b76460969ae8631be [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.
*/
#include <ignite/impl/binary/binary_common.h>
#include "ignite/odbc/system/odbc_constants.h"
#include "ignite/odbc/common_types.h"
namespace ignite
{
namespace odbc
{
int SqlResultToReturnCode(SqlResult::Type result)
{
switch (result)
{
case SqlResult::AI_SUCCESS:
return SQL_SUCCESS;
case SqlResult::AI_SUCCESS_WITH_INFO:
return SQL_SUCCESS_WITH_INFO;
case SqlResult::AI_NO_DATA:
return SQL_NO_DATA;
case SqlResult::AI_NEED_DATA:
return SQL_NEED_DATA;
case SqlResult::AI_ERROR:
default:
return SQL_ERROR;
}
}
DiagnosticField::Type DiagnosticFieldToInternal(int16_t field)
{
switch (field)
{
case SQL_DIAG_CURSOR_ROW_COUNT:
return DiagnosticField::HEADER_CURSOR_ROW_COUNT;
case SQL_DIAG_DYNAMIC_FUNCTION:
return DiagnosticField::HEADER_DYNAMIC_FUNCTION;
case SQL_DIAG_DYNAMIC_FUNCTION_CODE:
return DiagnosticField::HEADER_DYNAMIC_FUNCTION_CODE;
case SQL_DIAG_NUMBER:
return DiagnosticField::HEADER_NUMBER;
case SQL_DIAG_RETURNCODE:
return DiagnosticField::HEADER_RETURNCODE;
case SQL_DIAG_ROW_COUNT:
return DiagnosticField::HEADER_ROW_COUNT;
case SQL_DIAG_CLASS_ORIGIN:
return DiagnosticField::STATUS_CLASS_ORIGIN;
case SQL_DIAG_COLUMN_NUMBER:
return DiagnosticField::STATUS_COLUMN_NUMBER;
case SQL_DIAG_CONNECTION_NAME:
return DiagnosticField::STATUS_CONNECTION_NAME;
case SQL_DIAG_MESSAGE_TEXT:
return DiagnosticField::STATUS_MESSAGE_TEXT;
case SQL_DIAG_NATIVE:
return DiagnosticField::STATUS_NATIVE;
case SQL_DIAG_ROW_NUMBER:
return DiagnosticField::STATUS_ROW_NUMBER;
case SQL_DIAG_SERVER_NAME:
return DiagnosticField::STATUS_SERVER_NAME;
case SQL_DIAG_SQLSTATE:
return DiagnosticField::STATUS_SQLSTATE;
case SQL_DIAG_SUBCLASS_ORIGIN:
return DiagnosticField::STATUS_SUBCLASS_ORIGIN;
default:
break;
}
return DiagnosticField::UNKNOWN;
}
EnvironmentAttribute::Type EnvironmentAttributeToInternal(int32_t attr)
{
switch (attr)
{
case SQL_ATTR_ODBC_VERSION:
return EnvironmentAttribute::ODBC_VERSION;
case SQL_ATTR_OUTPUT_NTS:
return EnvironmentAttribute::OUTPUT_NTS;
default:
break;
}
return EnvironmentAttribute::UNKNOWN;
}
SqlState::Type ResponseStatusToSqlState(int32_t status)
{
switch (status)
{
case ResponseStatus::PARSING_FAILURE:
case ResponseStatus::KEY_UPDATE:
case ResponseStatus::UNEXPECTED_OPERATION:
return SqlState::S42000_SYNTAX_ERROR_OR_ACCESS_VIOLATION;
case ResponseStatus::UNSUPPORTED_OPERATION:
return SqlState::SHYC00_OPTIONAL_FEATURE_NOT_IMPLEMENTED;
case ResponseStatus::UNEXPECTED_ELEMENT_TYPE:
return SqlState::SHY004_INVALID_SQL_DATA_TYPE;
case ResponseStatus::DUPLICATE_KEY:
case ResponseStatus::NULL_KEY:
case ResponseStatus::NULL_VALUE:
return SqlState::S23000_INTEGRITY_CONSTRAINT_VIOLATION;
case ResponseStatus::TABLE_NOT_FOUND:
return SqlState::S42S02_TABLE_OR_VIEW_NOT_FOUND;
case ResponseStatus::INDEX_ALREADY_EXISTS:
return SqlState::S42S11_INDEX_ALREADY_EXISTS;
case ResponseStatus::INDEX_NOT_FOUND:
return SqlState::S42S12_INDEX_NOT_FOUND;
case ResponseStatus::TABLE_ALREADY_EXISTS:
return SqlState::S42S01_TABLE_OR_VIEW_ALREADY_EXISTS;
case ResponseStatus::COLUMN_NOT_FOUND:
return SqlState::S42S22_COLUMN_NOT_FOUND;
case ResponseStatus::COLUMN_ALREADY_EXISTS:
return SqlState::S42S21_COLUMN_ALREADY_EXISTS;
case ResponseStatus::TRANSACTION_COMPLETED:
return SqlState::S25000_INVALID_TRANSACTION_STATE;
case ResponseStatus::TRANSACTION_SERIALIZATION_ERROR:
return SqlState::S40001_SERIALIZATION_FAILURE;
case ResponseStatus::CACHE_NOT_FOUND:
case ResponseStatus::NULL_TABLE_DESCRIPTOR:
case ResponseStatus::CONVERSION_FAILED:
case ResponseStatus::CONCURRENT_UPDATE:
case ResponseStatus::ENTRY_PROCESSING:
case ResponseStatus::TABLE_DROP_FAILED:
case ResponseStatus::STMT_TYPE_MISMATCH:
case ResponseStatus::UNKNOWN_ERROR:
default:
return SqlState::SHY000_GENERAL_ERROR;
}
}
}
}