http://git-wip-us.apache.org/repos/asf/ignite/blob/e8287063/modules/platforms/cpp/odbc/include/ignite/odbc/query/table_metadata_query.h ---------------------------------------------------------------------- diff --git a/modules/platforms/cpp/odbc/include/ignite/odbc/query/table_metadata_query.h b/modules/platforms/cpp/odbc/include/ignite/odbc/query/table_metadata_query.h new file mode 100644 index 0000000..1b05377 --- /dev/null +++ b/modules/platforms/cpp/odbc/include/ignite/odbc/query/table_metadata_query.h @@ -0,0 +1,150 @@ +/* + * 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_DRIVER_TABLE_METADATA_QUERY +#define _IGNITE_ODBC_DRIVER_TABLE_METADATA_QUERY + +#include "ignite/odbc/query/query.h" +#include "ignite/odbc/meta/table_meta.h" + +namespace ignite +{ + namespace odbc + { + /** Connection forward-declaration. */ + class Connection; + + namespace query + { + /** + * Query. + */ + class TableMetadataQuery : public Query + { + public: + /** + * Constructor. + * + * @param diag Diagnostics collector. + * @param connection Associated connection. + * @param catalog Catalog search pattern. + * @param schema Schema search pattern. + * @param table Table search pattern. + * @param tableType Table type search pattern. + */ + TableMetadataQuery(diagnostic::Diagnosable& diag, Connection& connection, + const std::string& catalog, const std::string& schema, + const std::string& table, const std::string& tableType); + + /** + * Destructor. + */ + virtual ~TableMetadataQuery(); + + /** + * Execute query. + * + * @return True on success. + */ + virtual SqlResult Execute(); + + /** + * Get column metadata. + * + * @return Column metadata. + */ + virtual const meta::ColumnMetaVector& GetMeta() const; + + /** + * Fetch next result row to application buffers. + * + * @return Operation result. + */ + virtual SqlResult FetchNextRow(app::ColumnBindingMap& columnBindings); + + /** + * Get data of the specified column in the result set. + * + * @param columnIdx Column index. + * @param buffer Buffer to put column data to. + * @return Operation result. + */ + virtual SqlResult GetColumn(uint16_t columnIdx, app::ApplicationDataBuffer& buffer); + + /** + * Close query. + * + * @return True on success. + */ + virtual SqlResult Close(); + + /** + * Check if data is available. + * + * @return True if data is available. + */ + virtual bool DataAvailable() const; + + /** + * Get number of rows affected by the statement. + * + * @return Number of rows affected by the statement. + */ + virtual int64_t AffectedRows() const; + + private: + IGNITE_NO_COPY_ASSIGNMENT(TableMetadataQuery); + + /** + * Make get columns metadata requets and use response to set internal state. + * + * @return True on success. + */ + SqlResult MakeRequestGetTablesMeta(); + + /** Connection associated with the statement. */ + Connection& connection; + + /** Catalog search pattern. */ + std::string catalog; + + /** Schema search pattern. */ + std::string schema; + + /** Table search pattern. */ + std::string table; + + /** Table type search pattern. */ + std::string tableType; + + /** Query executed. */ + bool executed; + + /** Fetched metadata. */ + meta::TableMetaVector meta; + + /** Metadata cursor. */ + meta::TableMetaVector::iterator cursor; + + /** Columns metadata. */ + meta::ColumnMetaVector columnsMeta; + }; + } + } +} + +#endif \ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/e8287063/modules/platforms/cpp/odbc/include/ignite/odbc/query/type_info_query.h ---------------------------------------------------------------------- diff --git a/modules/platforms/cpp/odbc/include/ignite/odbc/query/type_info_query.h b/modules/platforms/cpp/odbc/include/ignite/odbc/query/type_info_query.h new file mode 100644 index 0000000..ffef3e4 --- /dev/null +++ b/modules/platforms/cpp/odbc/include/ignite/odbc/query/type_info_query.h @@ -0,0 +1,118 @@ +/* + * 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_DRIVER_TYPE_INFO_QUERY +#define _IGNITE_ODBC_DRIVER_TYPE_INFO_QUERY + +#include "ignite/odbc/query/query.h" + +namespace ignite +{ + namespace odbc + { + namespace query + { + /** + * Type info query. + */ + class TypeInfoQuery : public Query + { + public: + /** + * Constructor. + * + * @param diag Diagnostics collector. + * @param sqlType SQL type. + */ + TypeInfoQuery(diagnostic::Diagnosable& diag, int16_t sqlType); + + /** + * Destructor. + */ + virtual ~TypeInfoQuery(); + + /** + * Execute query. + * + * @return True on success. + */ + virtual SqlResult Execute(); + + /** + * Get column metadata. + * + * @return Column metadata. + */ + virtual const meta::ColumnMetaVector& GetMeta() const; + + /** + * Fetch next result row to application buffers. + * + * @return Operation result. + */ + virtual SqlResult FetchNextRow(app::ColumnBindingMap& columnBindings); + + /** + * Get data of the specified column in the result set. + * + * @param columnIdx Column index. + * @param buffer Buffer to put column data to. + * @return Operation result. + */ + virtual SqlResult GetColumn(uint16_t columnIdx, app::ApplicationDataBuffer& buffer); + + /** + * Close query. + * + * @return True on success. + */ + virtual SqlResult Close(); + + /** + * Check if data is available. + * + * @return True if data is available. + */ + virtual bool DataAvailable() const; + + /** + * Get number of rows affected by the statement. + * + * @return Number of rows affected by the statement. + */ + virtual int64_t AffectedRows() const; + + private: + IGNITE_NO_COPY_ASSIGNMENT(TypeInfoQuery); + + /** Columns metadata. */ + meta::ColumnMetaVector columnsMeta; + + /** Executed flag. */ + bool executed; + + /** Requested types. */ + std::vector<int8_t> types; + + /** Query cursor. */ + std::vector<int8_t>::const_iterator cursor; + }; + } + } +} + +#endif \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ignite/blob/e8287063/modules/platforms/cpp/odbc/include/ignite/odbc/result_page.h ---------------------------------------------------------------------- diff --git a/modules/platforms/cpp/odbc/include/ignite/odbc/result_page.h b/modules/platforms/cpp/odbc/include/ignite/odbc/result_page.h new file mode 100644 index 0000000..5c8cac3 --- /dev/null +++ b/modules/platforms/cpp/odbc/include/ignite/odbc/result_page.h @@ -0,0 +1,101 @@ +/* + * 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_DRIVER_RESULT_PAGE +#define _IGNITE_ODBC_DRIVER_RESULT_PAGE + +#include <stdint.h> + +#include <ignite/impl/binary/binary_reader_impl.h> + +#include "ignite/odbc/app/application_data_buffer.h" +#include "ignite/odbc/common_types.h" + +namespace ignite +{ + namespace odbc + { + /** + * Query result page. + */ + class ResultPage + { + enum { DEFAULT_ALLOCATED_MEMORY = 1024 }; + + public: + // Default result page size. + enum { DEFAULT_SIZE = 32 }; + + /** + * Constructor. + */ + ResultPage(); + + /** + * Destructor. + */ + ~ResultPage(); + + /** + * Read result page using provided reader. + * @param reader Reader. + */ + void Read(ignite::impl::binary::BinaryReaderImpl& reader); + + /** + * Get page size. + * @return Page size. + */ + int32_t GetSize() const + { + return size; + } + + /** + * Check if the page is last. + * @return True if the page is last. + */ + bool IsLast() const + { + return last; + } + + /** + * Get page data. + * @return Page data. + */ + ignite::impl::interop::InteropUnpooledMemory& GetData() + { + return data; + } + + private: + IGNITE_NO_COPY_ASSIGNMENT(ResultPage); + + /** Last page flag. */ + bool last; + + /** Page size in rows. */ + int32_t size; + + /** Memory that contains current row page data. */ + ignite::impl::interop::InteropUnpooledMemory data; + }; + } +} + +#endif \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ignite/blob/e8287063/modules/platforms/cpp/odbc/include/ignite/odbc/row.h ---------------------------------------------------------------------- diff --git a/modules/platforms/cpp/odbc/include/ignite/odbc/row.h b/modules/platforms/cpp/odbc/include/ignite/odbc/row.h new file mode 100644 index 0000000..7673555 --- /dev/null +++ b/modules/platforms/cpp/odbc/include/ignite/odbc/row.h @@ -0,0 +1,132 @@ +/* + * 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_DRIVER_ROW +#define _IGNITE_ODBC_DRIVER_ROW + +#include <stdint.h> +#include <vector> + +#include "ignite/odbc/column.h" +#include "ignite/odbc/app/application_data_buffer.h" + + +namespace ignite +{ + namespace odbc + { + /** + * Query result row. + */ + class Row + { + public: + /** + * Constructor. + */ + Row(ignite::impl::interop::InteropUnpooledMemory& pageData); + + /** + * Destructor. + */ + ~Row(); + + /** + * Get row size in columns. + * + * @return Row size. + */ + int32_t GetSize() const + { + return size; + } + + /** + * Read column data and store it in application data buffer. + * + * @param dataBuf Application data buffer. + * @return True on success. + */ + SqlResult ReadColumnToBuffer(uint16_t columnIdx, app::ApplicationDataBuffer& dataBuf); + + /** + * Move to next row. + * + * @return True on success. + */ + bool MoveToNext(); + + private: + IGNITE_NO_COPY_ASSIGNMENT(Row); + + /** + * Reinitialize row state using stream data. + * @note Stream must be positioned at the beginning of the row. + */ + void Reinit(); + + /** + * Get columns by its index. + * + * Column indexing starts at 1. + * + * @note This operation is private because it's unsafe to use: + * It is neccessary to ensure that column is discovered prior + * to calling this method using EnsureColumnDiscovered(). + * + * @param columnIdx Column index. + * @return Reference to specified column. + */ + Column& GetColumn(uint16_t columnIdx) + { + return columns[columnIdx - 1]; + } + + /** + * Ensure that column data is discovered. + * + * @param columnIdx Column index. + * @return True if the column is discovered and false if it can not + * be discovered. + */ + bool EnsureColumnDiscovered(uint16_t columnIdx); + + /** Row position in current page. */ + int32_t rowBeginPos; + + /** Current position in row. */ + int32_t pos; + + /** Row size in columns. */ + int32_t size; + + /** Memory that contains current row data. */ + ignite::impl::interop::InteropUnpooledMemory& pageData; + + /** Page data input stream. */ + ignite::impl::interop::InteropInputStream stream; + + /** Data reader. */ + ignite::impl::binary::BinaryReaderImpl reader; + + /** Columns. */ + std::vector<Column> columns; + }; + } +} + +#endif \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ignite/blob/e8287063/modules/platforms/cpp/odbc/include/ignite/odbc/statement.h ---------------------------------------------------------------------- diff --git a/modules/platforms/cpp/odbc/include/ignite/odbc/statement.h b/modules/platforms/cpp/odbc/include/ignite/odbc/statement.h new file mode 100644 index 0000000..bbe5da5 --- /dev/null +++ b/modules/platforms/cpp/odbc/include/ignite/odbc/statement.h @@ -0,0 +1,525 @@ +/* + * 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_DRIVER_STATEMENT +#define _IGNITE_ODBC_DRIVER_STATEMENT + +#include <stdint.h> + +#include <map> +#include <memory> + +#include <ignite/impl/interop/interop_output_stream.h> +#include <ignite/impl/interop/interop_input_stream.h> +#include <ignite/impl/binary/binary_writer_impl.h> + +#include "ignite/odbc/meta/column_meta.h" +#include "ignite/odbc/meta/table_meta.h" +#include "ignite/odbc/query/query.h" +#include "ignite/odbc/app/application_data_buffer.h" +#include "ignite/odbc/app/parameter.h" +#include "ignite/odbc/diagnostic/diagnosable_adapter.h" +#include "ignite/odbc/common_types.h" +#include "ignite/odbc/cursor.h" +#include "ignite/odbc/utility.h" + +namespace ignite +{ + namespace odbc + { + class Connection; + + /** + * SQL-statement abstraction. Holds SQL query user buffers data and + * call result. + */ + class Statement : public diagnostic::DiagnosableAdapter + { + friend class Connection; + public: + /** + * Destructor. + */ + ~Statement(); + + /** + * Bind result column to specified data buffer. + * + * @param columnIdx Column index. + * @param buffer Buffer to put column data to. + */ + void BindColumn(uint16_t columnIdx, const app::ApplicationDataBuffer& buffer); + + /** + * Unbind specified column buffer. + * + * @param columnIdx Column index. + */ + void UnbindColumn(uint16_t columnIdx); + + /** + * Unbind all column buffers. + */ + void UnbindAllColumns(); + + /** + * Set column binding offset pointer. + * + * @param ptr Column binding offset pointer. + */ + void SetColumnBindOffsetPtr(size_t* ptr); + + /** + * Get column binding offset pointer. + * + * @return Column binding offset pointer. + */ + size_t* GetColumnBindOffsetPtr(); + + /** + * Get number of columns in the result set. + * + * @return Columns number. + */ + int32_t GetColumnNumber(); + + /** + * Bind parameter. + * + * @param paramIdx Parameter index. + * @param param Parameter. + */ + void BindParameter(uint16_t paramIdx, const app::Parameter& param); + + /** + * Unbind specified parameter. + * + * @param paramIdx Parameter index. + */ + void UnbindParameter(uint16_t paramIdx); + + /** + * Unbind all parameters. + */ + void UnbindAllParameters(); + + /** + * Get number of binded parameters. + * + * @return Number of binded parameters. + */ + uint16_t GetParametersNumber(); + + /** + * Set parameter binding offset pointer. + * + * @param ptr Parameter binding offset pointer. + */ + void SetParamBindOffsetPtr(size_t* ptr); + + /** + * Get parameter binding offset pointer. + * + * @return Parameter binding offset pointer. + */ + size_t* GetParamBindOffsetPtr(); + + /** + * Get value of the column in the result set. + * + * @param columnIdx Column index. + * @param buffer Buffer to put column data to. + */ + void GetColumnData(uint16_t columnIdx, app::ApplicationDataBuffer& buffer); + + /** + * Prepare SQL query. + * + * @note Only SELECT queries are supported currently. + * @param query SQL query. + */ + void PrepareSqlQuery(const std::string& query); + + /** + * Prepare SQL query. + * + * @note Only SELECT queries are supported currently. + * @param query SQL query. + * @param len Query length. + */ + void PrepareSqlQuery(const char* query, size_t len); + + /** + * Execute SQL query. + * + * @note Only SELECT queries are supported currently. + * @param query SQL query. + */ + void ExecuteSqlQuery(const std::string& query); + + /** + * Execute SQL query. + * + * @note Only SELECT queries are supported currently. + * @param query SQL query. + * @param len Query length. + */ + void ExecuteSqlQuery(const char* query, size_t len); + + /** + * Execute SQL query. + * + * @note Only SELECT queries are supported currently. + */ + void ExecuteSqlQuery(); + + /** + * Get columns metadata. + * + * @param schema Schema search pattern. + * @param table Table search pattern. + * @param column Column search pattern. + */ + void ExecuteGetColumnsMetaQuery(const std::string& schema, + const std::string& table, const std::string& column); + + /** + * Get tables metadata. + * + * @param catalog Catalog search pattern. + * @param schema Schema search pattern. + * @param table Table search pattern. + * @param tableType Table type search pattern. + */ + void ExecuteGetTablesMetaQuery(const std::string& catalog, + const std::string& schema, const std::string& table, + const std::string& tableType); + + /** + * Get foreign keys. + * + * @param primaryCatalog Primary key catalog name. + * @param primarySchema Primary key schema name. + * @param primaryTable Primary key table name. + * @param foreignCatalog Foreign key catalog name. + * @param foreignSchema Foreign key schema name. + * @param foreignTable Foreign key table name. + */ + void ExecuteGetForeignKeysQuery(const std::string& primaryCatalog, + const std::string& primarySchema, const std::string& primaryTable, + const std::string& foreignCatalog, const std::string& foreignSchema, + const std::string& foreignTable); + + /** + * Get primary keys. + * + * @param catalog Catalog name. + * @param schema Schema name. + * @param table Table name. + */ + void ExecuteGetPrimaryKeysQuery(const std::string& catalog, + const std::string& schema, const std::string& table); + + /** + * Get special columns. + * + * @param type Special column type. + * @param catalog Catalog name. + * @param schema Schema name. + * @param table Table name. + * @param scope Minimum required scope of the rowid. + * @param type Determines whether to return special columns that + * can have a NULL value. + */ + void ExecuteSpecialColumnsQuery(int16_t type, + const std::string& catalog, const std::string& schema, + const std::string& table, int16_t scope, int16_t nullable); + + /** + * Get type info. + * + * @param sqlType SQL type for which to return info or SQL_ALL_TYPES. + */ + void ExecuteGetTypeInfoQuery(int16_t sqlType); + + /** + * Close statement. + */ + void Close(); + + /** + * Fetch query result row. + */ + void FetchRow(); + + /** + * Get column metadata. + * + * @return Column metadata. + */ + const meta::ColumnMetaVector* GetMeta() const; + + /** + * Check if data is available. + * + * @return True if data is available. + */ + bool DataAvailable() const; + + /** + * Get column attribute. + * + * @param colIdx Column index. + * @param attrId Attribute ID. + * @param strbuf Buffer for string attribute value. + * @param buflen String buffer size. + * @param reslen Buffer to put resulting string length to. + * @param numbuf Numeric value buffer. + */ + void GetColumnAttribute(uint16_t colIdx, uint16_t attrId, char* strbuf, + int16_t buflen, int16_t* reslen, SqlLen* numbuf); + + /** + * Get number of rows affected by the statement. + * + * @return Number of rows affected by the statement. + */ + int64_t AffectedRows(); + + /** + * Set rows fetched buffer pointer. + * + * @param ptr Rows fetched buffer pointer. + */ + void SetRowsFetchedPtr(size_t* ptr); + + /** + * Get rows fetched buffer pointer. + * + * @return Rows fetched buffer pointer. + */ + size_t* GetRowsFetchedPtr(); + + /** + * Set row statuses array pointer. + * + * @param ptr Row statuses array pointer. + */ + void SetRowStatusesPtr(uint16_t* ptr); + + /** + * Get row statuses array pointer. + * + * @return Row statuses array pointer. + */ + uint16_t* GetRowStatusesPtr(); + + private: + IGNITE_NO_COPY_ASSIGNMENT(Statement); + + /** + * Get value of the column in the result set. + * + * @param columnIdx Column index. + * @param buffer Buffer to put column data to. + * @return Operation result. + */ + SqlResult InternalGetColumnData(uint16_t columnIdx, app::ApplicationDataBuffer& buffer); + + /** + * Close statement. + * Internal call. + * + * @return Operation result. + */ + SqlResult InternalClose(); + + /** + * Prepare SQL query. + * + * @note Only SELECT queries are supported currently. + * @param query SQL query. + * @param len Query length. + * @return Operation result. + */ + SqlResult InternalPrepareSqlQuery(const char* query, size_t len); + + /** + * Execute SQL query. + * + * @note Only SELECT queries are supported currently. + * @param query SQL query. + * @param len Query length. + * @return Operation result. + */ + SqlResult InternalExecuteSqlQuery(const char* query, size_t len); + + /** + * Execute SQL query. + * + * @note Only SELECT queries are supported currently. + * @return Operation result. + */ + SqlResult InternalExecuteSqlQuery(); + + /** + * Fetch query result row. + * + * @return Operation result. + */ + SqlResult InternalFetchRow(); + + /** + * Get number of columns in the result set. + * + * @param res Columns number. + * @return Operation result. + */ + SqlResult InternalGetColumnNumber(int32_t &res); + + /** + * Get columns metadata. + * + * @param schema Schema search pattern. + * @param table Table search pattern. + * @param column Column search pattern. + * @return Operation result. + */ + SqlResult InternalExecuteGetColumnsMetaQuery(const std::string& schema, + const std::string& table, const std::string& column); + + /** + * Get tables metadata. + * + * @param catalog Catalog search pattern. + * @param schema Schema search pattern. + * @param table Table search pattern. + * @param tableType Table type search pattern. + * @return Operation result. + */ + SqlResult InternalExecuteGetTablesMetaQuery(const std::string& catalog, + const std::string& schema, const std::string& table, + const std::string& tableType); + + /** + * Get foreign keys. + * + * @param primaryCatalog Primary key catalog name. + * @param primarySchema Primary key schema name. + * @param primaryTable Primary key table name. + * @param foreignCatalog Foreign key catalog name. + * @param foreignSchema Foreign key schema name. + * @param foreignTable Foreign key table name. + * @return Operation result. + */ + SqlResult InternalExecuteGetForeignKeysQuery(const std::string& primaryCatalog, + const std::string& primarySchema, const std::string& primaryTable, + const std::string& foreignCatalog, const std::string& foreignSchema, + const std::string& foreignTable); + + /** + * Get primary keys. + * + * @param catalog Catalog name. + * @param schema Schema name. + * @param table Table name. + * @return Operation result. + */ + SqlResult InternalExecuteGetPrimaryKeysQuery(const std::string& catalog, + const std::string& schema, const std::string& table); + + /** + * Get special columns. + * + * @param type Special column type. + * @param catalog Catalog name. + * @param schema Schema name. + * @param table Table name. + * @param scope Minimum required scope of the rowid. + * @param nullable Determines whether to return special columns + * that can have a NULL value. + * @return Operation result. + */ + SqlResult InternalExecuteSpecialColumnsQuery(int16_t type, + const std::string& catalog, const std::string& schema, + const std::string& table, int16_t scope, int16_t nullable); + + /** + * Get type info. + * + * @param sqlType SQL type for which to return info or SQL_ALL_TYPES. + */ + SqlResult InternalExecuteGetTypeInfoQuery(int16_t sqlType); + + /** + * Get column attribute. + * + * @param colIdx Column index. + * @param attrId Attribute ID. + * @param strbuf Buffer for string attribute value. + * @param buflen String buffer size. + * @param reslen Buffer to put resulting string length to. + * @param numbuf Numeric value buffer. + * @return Operation result. + */ + SqlResult InternalGetColumnAttribute(uint16_t colIdx, uint16_t attrId, + char* strbuf, int16_t buflen, int16_t* reslen, SqlLen* numbuf); + + /** + * Get number of rows affected by the statement. + * + * @param rowCnt Number of rows affected by the statement. + * @return Operation result. + */ + SqlResult InternalAffectedRows(int64_t& rowCnt); + + /** + * Constructor. + * Called by friend classes. + * + * @param parent Connection associated with the statement. + */ + Statement(Connection& parent); + + /** Connection associated with the statement. */ + Connection& connection; + + /** Column bindings. */ + app::ColumnBindingMap columnBindings; + + /** Parameter bindings. */ + app::ParameterBindingMap paramBindings; + + /** Underlying query. */ + std::auto_ptr<query::Query> currentQuery; + + /** Buffer to store number of rows fetched by the last fetch. */ + size_t* rowsFetched; + + /** Array to store statuses of rows fetched by the last fetch. */ + uint16_t* rowStatuses; + + /** Offset added to pointers to change binding of parameters. */ + size_t* paramBindOffset; + + /* Offset added to pointers to change binding of column data. */ + size_t* columnBindOffset; + }; + } +} + +#endif \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ignite/blob/e8287063/modules/platforms/cpp/odbc/include/ignite/odbc/system/odbc_constants.h ---------------------------------------------------------------------- diff --git a/modules/platforms/cpp/odbc/include/ignite/odbc/system/odbc_constants.h b/modules/platforms/cpp/odbc/include/ignite/odbc/system/odbc_constants.h new file mode 100644 index 0000000..0262be5 --- /dev/null +++ b/modules/platforms/cpp/odbc/include/ignite/odbc/system/odbc_constants.h @@ -0,0 +1,45 @@ +/* + * 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_DRIVER_ODBC_CONSTANTS +#define _IGNITE_ODBC_DRIVER_ODBC_CONSTANTS + +#ifdef _WIN32 + +#define _WINSOCKAPI_ +#include <windows.h> + +#ifdef min +# undef min +#endif // min + +#ifdef GetMessage +# undef GetMessage +#endif // GetMessage + +#endif //_WIN32 + +#define ODBCVER 0x0380 + +#include <sqlext.h> +#include <odbcinst.h> + +#ifndef UNREFERENCED_PARAMETER +#define UNREFERENCED_PARAMETER(x) (void)(x) +#endif // UNREFERENCED_PARAMETER + +#endif //_IGNITE_ODBC_DRIVER_ODBC_CONSTANTS http://git-wip-us.apache.org/repos/asf/ignite/blob/e8287063/modules/platforms/cpp/odbc/include/ignite/odbc/system/socket_client.h ---------------------------------------------------------------------- diff --git a/modules/platforms/cpp/odbc/include/ignite/odbc/system/socket_client.h b/modules/platforms/cpp/odbc/include/ignite/odbc/system/socket_client.h new file mode 100644 index 0000000..8a59e15 --- /dev/null +++ b/modules/platforms/cpp/odbc/include/ignite/odbc/system/socket_client.h @@ -0,0 +1,92 @@ +/* + * 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_DRIVER_SOCKET_CLIENT +#define _IGNITE_ODBC_DRIVER_SOCKET_CLIENT + +#include <stdint.h> + +#include "ignite/common/common.h" + +namespace ignite +{ + namespace odbc + { + namespace tcp + { + /** + * Socket client implementation. + */ + class SocketClient + { + public: + /** + * Constructor. + */ + SocketClient(); + + /** + * Destructor. + */ + ~SocketClient(); + + /** + * Establish connection with remote TCP service. + * + * @param hostname Remote host name. + * @param port TCP service port. + * @return True on success. + */ + bool Connect(const char* hostname, uint16_t port); + + /** + * Close established connection. + * + * @return True on success. + */ + void Close(); + + /** + * Send data by established connection. + * + * @param data Pointer to data to be sent. + * @param size Size of the data in bytes. + * @return Number of bytes that have been sent on success and negative + * value on failure. + */ + int Send(const int8_t* data, size_t size); + + /** + * Receive data from established connection. + * + * @param data Pointer to data buffer. + * @param size Size of the buffer in bytes. + * @return Number of bytes that have been received on success and negative + * value on failure. + */ + int Receive(int8_t* buffer, size_t size); + + private: + intptr_t socketHandle; + + IGNITE_NO_COPY_ASSIGNMENT(SocketClient) + }; + } + } +} + +#endif \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ignite/blob/e8287063/modules/platforms/cpp/odbc/include/ignite/odbc/type_traits.h ---------------------------------------------------------------------- diff --git a/modules/platforms/cpp/odbc/include/ignite/odbc/type_traits.h b/modules/platforms/cpp/odbc/include/ignite/odbc/type_traits.h new file mode 100644 index 0000000..230a4ec --- /dev/null +++ b/modules/platforms/cpp/odbc/include/ignite/odbc/type_traits.h @@ -0,0 +1,313 @@ +/* + * 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_DRIVER_TYPE_TRAITS +#define _IGNITE_ODBC_DRIVER_TYPE_TRAITS + +#include <stdint.h> + +#include <string> + +namespace ignite +{ + namespace odbc + { + namespace type_traits + { +#ifdef ODBC_DEBUG + /** + * Convert statement attribute ID to string containing its name. + * Debug function. + * @param type Attribute ID. + * @return Null-terminated string containing attribute name. + */ + const char* StatementAttrIdToString(long id); +#endif + + /** + * ODBC type aliases. + * We use these so we will not be needed to include system-specific + * headers in our header files. + */ + enum IgniteSqlType + { + /** Alias for the SQL_C_CHAR type. */ + IGNITE_ODBC_C_TYPE_CHAR, + + /** Alias for the SQL_C_WCHAR type. */ + IGNITE_ODBC_C_TYPE_WCHAR, + + /** Alias for the SQL_C_SSHORT type. */ + IGNITE_ODBC_C_TYPE_SIGNED_SHORT, + + /** Alias for the SQL_C_USHORT type. */ + IGNITE_ODBC_C_TYPE_UNSIGNED_SHORT, + + /** Alias for the SQL_C_SLONG type. */ + IGNITE_ODBC_C_TYPE_SIGNED_LONG, + + /** Alias for the SQL_C_ULONG type. */ + IGNITE_ODBC_C_TYPE_UNSIGNED_LONG, + + /** Alias for the SQL_C_FLOAT type. */ + IGNITE_ODBC_C_TYPE_FLOAT, + + /** Alias for the SQL_C_DOUBLE type. */ + IGNITE_ODBC_C_TYPE_DOUBLE, + + /** Alias for the SQL_C_BIT type. */ + IGNITE_ODBC_C_TYPE_BIT, + + /** Alias for the SQL_C_STINYINT type. */ + IGNITE_ODBC_C_TYPE_SIGNED_TINYINT, + + /** Alias for the SQL_C_UTINYINT type. */ + IGNITE_ODBC_C_TYPE_UNSIGNED_TINYINT, + + /** Alias for the SQL_C_SBIGINT type. */ + IGNITE_ODBC_C_TYPE_SIGNED_BIGINT, + + /** Alias for the SQL_C_UBIGINT type. */ + IGNITE_ODBC_C_TYPE_UNSIGNED_BIGINT, + + /** Alias for the SQL_C_BINARY type. */ + IGNITE_ODBC_C_TYPE_BINARY, + + /** Alias for the SQL_C_TDATE type. */ + IGNITE_ODBC_C_TYPE_TDATE, + + /** Alias for the SQL_C_TTIME type. */ + IGNITE_ODBC_C_TYPE_TTIME, + + /** Alias for the SQL_C_TTIMESTAMP type. */ + IGNITE_ODBC_C_TYPE_TTIMESTAMP, + + /** Alias for the SQL_C_NUMERIC type. */ + IGNITE_ODBC_C_TYPE_NUMERIC, + + /** Alias for the SQL_C_GUID type. */ + IGNITE_ODBC_C_TYPE_GUID, + + /** Alias for the SQL_DEFAULT. */ + IGNITE_ODBC_C_TYPE_DEFAULT, + + /** Alias for all unsupported types. */ + IGNITE_ODBC_C_TYPE_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; + + /** 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 ODBC type; + * @return Internal driver type. + */ + IgniteSqlType 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 \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ignite/blob/e8287063/modules/platforms/cpp/odbc/include/ignite/odbc/utility.h ---------------------------------------------------------------------- diff --git a/modules/platforms/cpp/odbc/include/ignite/odbc/utility.h b/modules/platforms/cpp/odbc/include/ignite/odbc/utility.h new file mode 100644 index 0000000..4a2e928 --- /dev/null +++ b/modules/platforms/cpp/odbc/include/ignite/odbc/utility.h @@ -0,0 +1,171 @@ +/* + * 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_DRIVER_UTILITY +#define _IGNITE_ODBC_DRIVER_UTILITY + +#include <string> +#include <stdint.h> + +#ifdef min +# undef min +#endif //min + +#include <algorithm> + +#include <ignite/common/utils.h> + +#include "ignite/impl/binary/binary_reader_impl.h" +#include "ignite/impl/binary/binary_writer_impl.h" + +#include "ignite/odbc/decimal.h" + +#ifdef ODBC_DEBUG + +extern FILE* log_file; +void logInit(const char*); + +# define LOG_MSG(fmt, ...) \ + do { \ + logInit(ODBC_LOG_PATH); \ + fprintf(log_file, "%s: " fmt, __FUNCTION__, __VA_ARGS__); \ + fflush(log_file); \ + } while (false) + +#else +# define LOG_MSG(...) +#endif + +namespace ignite +{ + namespace utility + { + /** Using common version of the util. */ + using ignite::common::utils::IntoLower; + + /** + * Skip leading spaces. + * + * @param begin Iterator to the beginning of the character sequence. + * @param end Iterator to the end of the character sequence. + * @return Iterator to first non-blanc character. + */ + template<typename Iterator> + Iterator SkipLeadingSpaces(Iterator begin, Iterator end) + { + Iterator res = begin; + + while (isspace(*res) && res != end) + ++res; + + return res; + } + + /** + * Skip trailing spaces. + * + * @param begin Iterator to the beginning of the character sequence. + * @param end Iterator to the end of the character sequence. + * @return Iterator to last non-blanc character. + */ + template<typename Iterator> + Iterator SkipTrailingSpaces(Iterator begin, Iterator end) + { + Iterator res = end - 1; + + while (isspace(*res) && res != begin - 1) + --res; + + return res + 1; + } + + /** + * Remove leading and trailing spaces. + * + * @param begin Iterator to the beginning of the character sequence. + * @param end Iterator to the end of the character sequence. + * @return String without leading and trailing spaces. + */ + template<typename Iterator> + std::string RemoveSurroundingSpaces(Iterator begin, Iterator end) + { + std::string res; + + if (begin >= end) + return res; + + Iterator skipped_leading = SkipLeadingSpaces(begin, end); + Iterator skipped_trailing = SkipTrailingSpaces(skipped_leading, end); + + res.reserve(skipped_trailing - skipped_leading); + + std::copy(skipped_leading, skipped_trailing, std::back_insert_iterator<std::string>(res)); + + return res; + } + + template<typename T> + T* GetPointerWithOffset(T* ptr, size_t offset) + { + uint8_t* ptrBytes = (uint8_t*)ptr; + + return (T*)(ptrBytes + offset); + } + + /** + * Copy string to buffer of the specific length. + * @param str String to copy data from. + * @param buf Buffer to copy data to. + * @param buflen Length of the buffer. + * @return Length of the resulting string in buffer. + */ + size_t CopyStringToBuffer(const std::string& str, char* buf, size_t buflen); + + /** + * Read string from reader. + * @param reader Reader. + * @param str String. + */ + void ReadString(ignite::impl::binary::BinaryReaderImpl& reader, std::string& str); + + /** + * Write string using writer. + * @param writer Writer. + * @param str String. + */ + void WriteString(ignite::impl::binary::BinaryWriterImpl& writer, const std::string& str); + + /** + * Read decimal value using reader. + * + * @param reader Reader. + * @param decimal Decimal value. + */ + void ReadDecimal(ignite::impl::binary::BinaryReaderImpl& reader, Decimal& decimal); + + /** + * Convert SQL string buffer to std::string. + * + * @param sqlStr SQL string buffer. + * @param sqlStrLen SQL string length. + * @return Standard string containing the same data. + */ + std::string SqlStringToString(const unsigned char* sqlStr, int32_t sqlStrLen); + } +} + +#endif \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ignite/blob/e8287063/modules/platforms/cpp/odbc/odbc-driver/Makefile.am ---------------------------------------------------------------------- diff --git a/modules/platforms/cpp/odbc/odbc-driver/Makefile.am b/modules/platforms/cpp/odbc/odbc-driver/Makefile.am deleted file mode 100644 index 09f35fd..0000000 --- a/modules/platforms/cpp/odbc/odbc-driver/Makefile.am +++ /dev/null @@ -1,67 +0,0 @@ -## -## 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. -## - -ACLOCAL_AMFLAGS = "-Im4" - -SUBDIRS = . -DIST_SUBDIRS = . - -AM_CPPFLAGS = -I$(srcdir)/include -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/linux -DIGNITE_IMPL -AM_CXXFLAGS = -Wall -std=c++0x -LIB_LDFLAGS = -no-undefined -version-info 1 - -COMMON_SRC = os/linux/src/system/socket_client.cpp \ - src/app/application_data_buffer.cpp \ - src/app/parameter.cpp \ - src/common_types.cpp \ - src/config/configuration.cpp \ - src/config/connection_info.cpp \ - src/connection.cpp \ - src/cursor.cpp \ - src/decimal.cpp \ - src/diagnostic/diagnosable_adapter.cpp \ - src/diagnostic/diagnostic_record.cpp \ - src/diagnostic/diagnostic_record_storage.cpp \ - src/environment.cpp \ - src/meta/column_meta.cpp \ - src/meta/table_meta.cpp \ - src/odbc.cpp \ - src/query/column_metadata_query.cpp \ - src/query/data_query.cpp \ - src/query/foreign_keys_query.cpp \ - src/query/primary_keys_query.cpp \ - src/query/table_metadata_query.cpp \ - src/query/type_info_query.cpp \ - src/result_page.cpp \ - src/row.cpp \ - src/statement.cpp \ - src/type_traits.cpp \ - src/utility.cpp - - -lib_LTLIBRARIES = libignite-odbc.la -libignite_odbc_la_SOURCES = $(COMMON_SRC) -libignite_odbc_la_LDFLAGS = $(LIB_LDFLAGS) -L/usr/local/lib -lignite-common -lignite-binary -ldl -version-info 0:0:0 -release $(PACKAGE_VERSION) - -pkgconfigdir = $(libdir)/pkgconfig -pkgconfig_DATA = ignite-odbc.pc - -clean-local: - $(RM) *.gcno *.gcda - -clean-docs: - $(RM) $(DX_CLEANFILES) http://git-wip-us.apache.org/repos/asf/ignite/blob/e8287063/modules/platforms/cpp/odbc/odbc-driver/configure.ac ---------------------------------------------------------------------- diff --git a/modules/platforms/cpp/odbc/odbc-driver/configure.ac b/modules/platforms/cpp/odbc/odbc-driver/configure.ac deleted file mode 100644 index e69d73c..0000000 --- a/modules/platforms/cpp/odbc/odbc-driver/configure.ac +++ /dev/null @@ -1,62 +0,0 @@ -# -# 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. -# - -# -*- Autoconf -*- -# Process this file with autoconf to produce a configure script. - -AC_PREREQ([2.69]) -AC_INIT([Apache Ignite ODBC driver], [1.5.1.7927], [[email protected]], [ignite], [ignite.apache.org]) -AC_CONFIG_SRCDIR(src) - -AC_CANONICAL_SYSTEM -AC_CONFIG_MACRO_DIR([m4]) -AC_LANG([C++]) - -# Initialize automake -AM_INIT_AUTOMAKE([-Wall foreign subdir-objects]) -AC_CONFIG_HEADER(config.h) - -AM_PROG_AR - -# Checks for programs. -GXX="-g -O2" - -AC_PROG_CXX - -# Initialize Libtool -LT_INIT - -# Checks for libraries. -AC_CHECK_LIB([pthread], [pthread_mutex_lock]) - -# Checks for header files. - -# Checks for typedefs, structures, and compiler characteristics. -AC_C_INLINE -AC_TYPE_INT16_T -AC_TYPE_INT32_T -AC_TYPE_INT64_T -AC_TYPE_INT8_T -AC_TYPE_PID_T -AC_TYPE_SIZE_T - -# Checks for library functions. -AC_FUNC_ERROR_AT_LINE - -AC_CONFIG_FILES(Makefile ignite-odbc.pc) - -AC_OUTPUT http://git-wip-us.apache.org/repos/asf/ignite/blob/e8287063/modules/platforms/cpp/odbc/odbc-driver/ignite-odbc.pc.in ---------------------------------------------------------------------- diff --git a/modules/platforms/cpp/odbc/odbc-driver/ignite-odbc.pc.in b/modules/platforms/cpp/odbc/odbc-driver/ignite-odbc.pc.in deleted file mode 100644 index 13cd7e9..0000000 --- a/modules/platforms/cpp/odbc/odbc-driver/ignite-odbc.pc.in +++ /dev/null @@ -1,9 +0,0 @@ -prefix=@prefix@ -exec_prefix=@exec_prefix@ -libdir=@libdir@ -includedir=@includedir@ - -Name: ignite-odbc -Description: Apache Ignite ODBC driver. -Version: @PACKAGE_VERSION@ -Libs: -L${libdir} -lignite-odbc http://git-wip-us.apache.org/repos/asf/ignite/blob/e8287063/modules/platforms/cpp/odbc/odbc-driver/include/ignite/odbc/app/application_data_buffer.h ---------------------------------------------------------------------- diff --git a/modules/platforms/cpp/odbc/odbc-driver/include/ignite/odbc/app/application_data_buffer.h b/modules/platforms/cpp/odbc/odbc-driver/include/ignite/odbc/app/application_data_buffer.h deleted file mode 100644 index 051f459..0000000 --- a/modules/platforms/cpp/odbc/odbc-driver/include/ignite/odbc/app/application_data_buffer.h +++ /dev/null @@ -1,342 +0,0 @@ -/* - * 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_DRIVER_APPLICATION_DATA_BUFFER -#define _IGNITE_ODBC_DRIVER_APPLICATION_DATA_BUFFER - -#include <stdint.h> - -#include <map> - -#include <ignite/guid.h> - -#include "ignite/odbc/decimal.h" -#include "ignite/odbc/common_types.h" -#include "ignite/odbc/type_traits.h" - -namespace ignite -{ - namespace odbc - { - namespace app - { - /** - * User application data buffer. - */ - class ApplicationDataBuffer - { - public: - /** - * Default constructor. - */ - ApplicationDataBuffer(); - - /** - * Constructor. - * - * @param type Underlying data type. - * @param buffer Data buffer pointer. - * @param buflen Data buffer length. - * @param reslen Resulting data length. - * @param offset Pointer to buffer and reslen offset pointer. - */ - ApplicationDataBuffer(type_traits::IgniteSqlType type, void* buffer, SqlLen buflen, SqlLen* reslen, size_t** offset = 0); - - /** - * Copy constructor. - * - * @param other Other instance. - */ - ApplicationDataBuffer(const ApplicationDataBuffer& other); - - /** - * Destructor. - */ - ~ApplicationDataBuffer(); - - /** - * Copy assigment operator. - * - * @param other Other instance. - * @return This. - */ - ApplicationDataBuffer& operator=(const ApplicationDataBuffer& other); - - /** - * Set pointer to offset pointer. - * - * @param offset Pointer to offset pointer. - */ - void SetPtrToOffsetPtr(size_t** offset) - { - this->offset = offset; - } - - /** - * Put in buffer value of type int8_t. - * - * @param value Value. - */ - void PutInt8(int8_t value); - - /** - * Put in buffer value of type int16_t. - * - * @param value Value. - */ - void PutInt16(int16_t value); - - /** - * Put in buffer value of type int32_t. - * - * @param value Value. - */ - void PutInt32(int32_t value); - - /** - * Put in buffer value of type int64_t. - * - * @param value Value. - */ - void PutInt64(int64_t value); - - /** - * Put in buffer value of type float. - * - * @param value Value. - */ - void PutFloat(float value); - - /** - * Put in buffer value of type double. - * - * @param value Value. - */ - void PutDouble(double value); - - /** - * Put in buffer value of type string. - * - * @param value Value. - * @return Number of bytes that have been put in buffer. - */ - int32_t PutString(const std::string& value); - - /** - * Put in buffer value of type GUID. - * - * @param value Value. - */ - void PutGuid(const Guid& value); - - /** - * Put binary data in buffer. - * - * @param data Data pointer. - * @param len Data length. - * @return Number of bytes that have been put in buffer. - */ - int32_t PutBinaryData(void* data, size_t len); - - /** - * Put NULL. - */ - void PutNull(); - - /** - * Put decimal value to buffer. - * - * @param value Value to put. - */ - void PutDecimal(const Decimal& value); - - /** - * Get string. - * - * @return String value of buffer. - */ - std::string GetString(size_t maxLen) const; - - /** - * Get value of type int8_t. - * - * @return Integer value of type int8_t. - */ - int8_t GetInt8() const; - - /** - * Get value of type int16_t. - * - * @return Integer value of type int16_t. - */ - int16_t GetInt16() const; - - /** - * Get value of type int32_t. - * - * @return Integer value of type int32_t. - */ - int32_t GetInt32() const; - - /** - * Get value of type int64_t. - * - * @return Integer value of type int64_t. - */ - int64_t GetInt64() const; - - /** - * Get value of type float. - * - * @return Integer value of type float. - */ - float GetFloat() const; - - /** - * Get value of type double. - * - * @return Integer value of type double. - */ - double GetDouble() const; - - /** - * Get raw data. - * - * @return Buffer data. - */ - const void* GetData() const; - - /** - * Get result data length. - * - * @return Data length pointer. - */ - const SqlLen* GetResLen() const; - - /** - * Get buffer size in bytes. - * - * @return Buffer size. - */ - SqlLen GetSize() const - { - return buflen; - } - - private: - /** - * Get raw data. - * - * @return Buffer data. - */ - void* GetData(); - - /** - * Get result data length. - * - * @return Data length pointer. - */ - SqlLen* GetResLen(); - - /** - * Put value of numeric type in the buffer. - * - * @param value Numeric value to put. - */ - template<typename T> - void PutNum(T value); - - /** - * Put numeric value to numeric buffer. - * - * @param value Numeric value. - */ - template<typename Tbuf, typename Tin> - void PutNumToNumBuffer(Tin value); - - /** - * Put value to string buffer. - * - * @param value Value that can be converted to string. - */ - template<typename CharT, typename Tin> - void PutValToStrBuffer(const Tin& value); - - /** - * Put value to string buffer. - * Specialisation for int8_t. - * @param value Value that can be converted to string. - */ - template<typename CharT> - void PutValToStrBuffer(const int8_t & value); - - /** - * Put string to string buffer. - * - * @param value String value. - */ - template<typename OutCharT, typename InCharT> - void PutStrToStrBuffer(const std::basic_string<InCharT>& value); - - /** - * Put raw data to any buffer. - * - * @param data Data pointer. - * @param len Data length. - */ - void PutRawDataToBuffer(void *data, size_t len); - - /** - * Get int of type T. - * - * @return Integer value of specified type. - */ - template<typename T> - T GetNum() const; - - /** - * Apply buffer offset to pointer. - * Adds offset to pointer if offset pointer is not null. - * @param ptr Pointer. - * @return Pointer with applied offset. - */ - template<typename T> - T* ApplyOffset(T* ptr) const; - - /** Underlying data type. */ - type_traits::IgniteSqlType type; - - /** Buffer pointer. */ - void* buffer; - - /** Buffer length. */ - SqlLen buflen; - - /** Result length. */ - SqlLen* reslen; - - /** Pointer to implementation pointer to application offset */ - size_t** offset; - }; - - /** Column binging map type alias. */ - typedef std::map<uint16_t, ApplicationDataBuffer> ColumnBindingMap; - } - } -} - -#endif \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ignite/blob/e8287063/modules/platforms/cpp/odbc/odbc-driver/include/ignite/odbc/app/parameter.h ---------------------------------------------------------------------- diff --git a/modules/platforms/cpp/odbc/odbc-driver/include/ignite/odbc/app/parameter.h b/modules/platforms/cpp/odbc/odbc-driver/include/ignite/odbc/app/parameter.h deleted file mode 100644 index 8756f48..0000000 --- a/modules/platforms/cpp/odbc/odbc-driver/include/ignite/odbc/app/parameter.h +++ /dev/null @@ -1,113 +0,0 @@ -/* - * 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_DRIVER_APP_PARAMETER -#define _IGNITE_ODBC_DRIVER_APP_PARAMETER - -#include <stdint.h> - -#include <map> - -#include <ignite/guid.h> -#include <ignite/impl/binary/binary_writer_impl.h> -#include <ignite/impl/binary/binary_reader_impl.h> - -#include "ignite/odbc/app/application_data_buffer.h" -#include "ignite/odbc/type_traits.h" - -namespace ignite -{ - namespace odbc - { - namespace app - { - /** - * Statement parameter. - */ - class Parameter - { - public: - /** - * Default constructor. - */ - Parameter(); - - /** - * Constructor. - * - * @param buffer Underlying data buffer. - * @param sqlType IPD type. - * @param columnSize IPD column size. - * @param decDigits IPD decimal digits. - */ - Parameter(const ApplicationDataBuffer& buffer, int16_t sqlType, - size_t columnSize, int16_t decDigits); - - /** - * Copy constructor. - * - * @param other Other instance. - */ - Parameter(const Parameter& other); - - /** - * Destructor. - */ - ~Parameter(); - - /** - * Copy assigment operator. - * - * @param other Other instance. - * @return This. - */ - Parameter& operator=(const Parameter& other); - - /** - * Write request using provided writer. - * @param writer Writer. - */ - void Write(ignite::impl::binary::BinaryWriterImpl& writer) const; - - /** - * Get data buffer. - * - * @return underlying ApplicationDataBuffer instance. - */ - ApplicationDataBuffer& GetBuffer(); - - private: - /** Underlying data buffer. */ - ApplicationDataBuffer buffer; - - /** IPD type. */ - int16_t sqlType; - - /** IPD column size. */ - size_t columnSize; - - /** IPD decimal digits. */ - int16_t decDigits; - }; - - /** Parameter binging map type alias. */ - typedef std::map<uint16_t, Parameter> ParameterBindingMap; - } - } -} - -#endif \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ignite/blob/e8287063/modules/platforms/cpp/odbc/odbc-driver/include/ignite/odbc/column.h ---------------------------------------------------------------------- diff --git a/modules/platforms/cpp/odbc/odbc-driver/include/ignite/odbc/column.h b/modules/platforms/cpp/odbc/odbc-driver/include/ignite/odbc/column.h deleted file mode 100644 index dc0b6d9..0000000 --- a/modules/platforms/cpp/odbc/odbc-driver/include/ignite/odbc/column.h +++ /dev/null @@ -1,149 +0,0 @@ -/* - * 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_DRIVER_COLUMN -#define _IGNITE_ODBC_DRIVER_COLUMN - -#include <stdint.h> - -#include <ignite/impl/binary/binary_reader_impl.h> - -#include "ignite/odbc/app/application_data_buffer.h" - -namespace ignite -{ - namespace odbc - { - /** - * Result set column. - */ - class Column - { - public: - /** - * Default constructor. - */ - Column(); - - /** - * Copy constructor. - * - * @param other Another instance. - */ - Column(const Column& other); - - /** - * Copy operator. - * - * @param other Another instance. - * @return This. - */ - Column& operator=(const Column& other); - - /** - * Destructor. - */ - ~Column(); - - /** - * Constructor. - * - * @param reader Reader to be used to retrieve column data. - */ - Column(ignite::impl::binary::BinaryReaderImpl& reader); - - /** - * Get column size in bytes. - * - * @return Column size. - */ - int32_t GetSize() const - { - return size; - } - - /** - * Read column data and store it in application data buffer. - * - * @param dataBuf Application data buffer. - * @return Operation result. - */ - SqlResult ReadToBuffer(ignite::impl::binary::BinaryReaderImpl& reader, - app::ApplicationDataBuffer& dataBuf); - - /** - * Check if the column is in valid state. - * - * @return True if valid. - */ - bool IsValid() const - { - return startPos >= 0; - } - - /** - * Get unread data length. - * Find out how many bytes of data are left unread. - * - * @return Lengh of unread data in bytes. - */ - int32_t GetUnreadDataLength() const - { - return size - offset; - } - - /** - * Get unread data length. - * Find out how many bytes of data are left unread. - * - * @return Lengh of unread data in bytes. - */ - int32_t GetEndPosition() const - { - return endPos; - } - - private: - /** - * Increase offset. - * - * Increases offset on specified value and makes sure resulting - * offset does not exceed column size. - * - * @param value Offset is incremented on this value. - */ - void IncreaseOffset(int32_t value); - - /** Column type */ - int8_t type; - - /** Column position in current row. */ - int32_t startPos; - - /** Column end position in current row. */ - int32_t endPos; - - /** Current offset in column. */ - int32_t offset; - - /** Column data size in bytes. */ - int32_t size; - }; - } -} - -#endif \ No newline at end of file
