aboutsummaryrefslogtreecommitdiffstats
path: root/lib/odbc/c_src/odbcserver.h
diff options
context:
space:
mode:
authorErlang/OTP <[email protected]>2009-11-20 14:54:40 +0000
committerErlang/OTP <[email protected]>2009-11-20 14:54:40 +0000
commit84adefa331c4159d432d22840663c38f155cd4c1 (patch)
treebff9a9c66adda4df2106dfd0e5c053ab182a12bd /lib/odbc/c_src/odbcserver.h
downloadotp-84adefa331c4159d432d22840663c38f155cd4c1.tar.gz
otp-84adefa331c4159d432d22840663c38f155cd4c1.tar.bz2
otp-84adefa331c4159d432d22840663c38f155cd4c1.zip
The R13B03 release.OTP_R13B03
Diffstat (limited to 'lib/odbc/c_src/odbcserver.h')
-rw-r--r--lib/odbc/c_src/odbcserver.h193
1 files changed, 193 insertions, 0 deletions
diff --git a/lib/odbc/c_src/odbcserver.h b/lib/odbc/c_src/odbcserver.h
new file mode 100644
index 0000000000..ccd694a985
--- /dev/null
+++ b/lib/odbc/c_src/odbcserver.h
@@ -0,0 +1,193 @@
+/*
+ * %CopyrightBegin%
+ *
+ * Copyright Ericsson AB 2002-2009. All Rights Reserved.
+ *
+ * The contents of this file are subject to the Erlang Public License,
+ * Version 1.1, (the "License"); you may not use this file except in
+ * compliance with the License. You should have received a copy of the
+ * Erlang Public License along with this software. If not, it can be
+ * retrieved online at http://www.erlang.org/.
+ *
+ * Software distributed under the License is distributed on an "AS IS"
+ * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+ * the License for the specific language governing rights and limitations
+ * under the License.
+ *
+ * %CopyrightEnd%
+ *
+
+ */
+
+/* ----------------------------- CONSTANTS ------------------------------*/
+
+#define MAXCOLSIZE 8001
+#define MAX_ERR_MSG 1024
+#define ERRMSG_HEADR_SIZE 20
+#define MAX_CONN_STR_OUT 1024
+#define MAX_NAME 255
+#define TRUNCATED "01004"
+#define INFO "00000"
+#define SQL_STATE_SIZE 6
+#define TRUE 1
+#define FALSE 0
+#define WAIT_FOR_NEW_MSG 0
+#define NEW_MSG_ARRIVED 1
+#define DEC_NUM_LENGTH 50
+
+/* 0 in this case (SQL_ATTR_CONNECTION_TIMEOUT) corresponds to erlang
+ infinity. Erlang will handle all timeouts so we do not want any in the
+ portprogram. */
+#define TIME_OUT 0
+
+/* Constats defining the command protocol between the Erlang control process
+ and the port program. These constants must also be defined in the same
+ way in Erlang. */
+#define OPEN_CONNECTION 1
+#define CLOSE_CONNECTION 2
+#define COMMIT_TRANSACTION 3
+#define COMMIT 4
+#define ROLLBACK 5
+#define QUERY 6
+#define SELECT_COUNT 7
+#define SELECT_FIRST 8
+#define SELECT_LAST 9
+#define SELECT_NEXT 10
+#define SELECT_PREV 11
+#define SELECT 12
+#define SELECT_RELATIVE 13
+#define SELECT_ABSOLUTE 14
+#define SELECT_N_NEXT 15
+#define PARAM_QUERY 16
+#define DESCRIBE 17
+#define SHUTDOWN 18
+#define LENGTH_INDICATOR_SIZE 4
+#define INT_VALUE 1
+#define STR_VALUE 2
+#define ON 1
+#define OFF 2
+#define DUMMY_OFFSET 0
+
+/* EXIT CODES */
+#define EXIT_ALLOC 2
+#define EXIT_ENV 3
+#define EXIT_CONNECTION 4
+#define EXIT_FREE 5
+#define EXIT_STDIN_HEADER 6
+#define EXIT_STDIN_BODY 7
+#define EXIT_BIN 8
+#define EXIT_THREAD 9
+#define EXIT_PARAM_ARRAY 10
+#define EXIT_OLD_WINSOCK 11
+#define EXIT_SOCKET_CONNECT 12
+#define EXIT_SOCKET_SEND_HEADER 13
+#define EXIT_SOCKET_SEND_BODY 14
+#define EXIT_SOCKET_RECV_MSGSIZE 15
+#define EXIT_SOCKET_SEND_MSGSIZE 16
+#define EXIT_SOCKET_RECV_HEADER 17
+#define EXIT_SOCKET_RECV_BODY 18
+#define EXIT_COLS 19
+#define EXIT_ROWS 20
+#define EXIT_DESC 21
+#define EXIT_BIND 22
+#define EXIT_DRIVER_INFO 23
+
+/* COL_SIZE */
+#define COL_SQL_SMALLINT 5
+#define COL_SQL_INTEGER 10
+#define COL_SQL_REAL 7
+#define COL_SQL_DOUBLE 15
+#define COL_SQL_TINYINT 4
+
+/* Types of parameters given to param_query*/
+#define USER_SMALL_INT 1
+#define USER_INT 2
+#define USER_DECIMAL 3
+#define USER_NMERIC 4
+#define USER_CHAR 5
+#define USER_VARCHAR 6
+#define USER_FLOAT 7
+#define USER_REAL 8
+#define USER_DOUBLE 9
+#define USER_BOOLEAN 10
+#define USER_TINY_INT 11
+
+/*------------------------ TYPDEFS ----------------------------------*/
+
+typedef unsigned char byte;
+typedef int Boolean;
+
+typedef struct {
+ SQLSMALLINT c;
+ SQLSMALLINT sql;
+ SQLUINTEGER col_size;
+ SQLSMALLINT decimal_digits;
+ SQLLEN len;
+ SQLLEN strlen_or_indptr;
+ SQLLEN *strlen_or_indptr_array;
+} col_type;
+
+typedef struct {
+ char *buffer;
+ col_type type;
+} db_column;
+
+typedef struct {
+ int length;
+ byte *buffer;
+ Boolean dyn_alloc;
+} db_result_msg;
+
+typedef struct {
+ SQLCHAR sqlState[SQL_STATE_SIZE];
+ byte error_msg[MAX_ERR_MSG];
+} diagnos;
+
+typedef struct {
+ col_type type;
+ int offset;
+ SQLUSMALLINT input_output_type;
+ union {
+ byte *string;
+ SQLINTEGER *integer;
+ double *floating;
+ Boolean *bool;
+ }values;
+} param_array;
+
+typedef struct {
+ SQLUSMALLINT params_processed;
+ SQLUSMALLINT *param_status_array;
+} param_status;
+
+typedef struct {
+ SQLHDBC connection_handle;
+ SQLHENV environment_handle;
+ SQLHSTMT statement_handle;
+ db_column *columns;
+ int number_of_columns;
+ ei_x_buff dynamic_buffer;
+ Boolean associated_result_set;
+ Boolean use_srollable_cursors;
+ Boolean tuple_row;
+ Boolean exists_more_result_sets;
+ Boolean param_query;
+ Boolean out_params;
+} db_state;
+
+typedef enum {
+ ERL_ODBC_IN, ERL_ODBC_OUT, ERL_ODBC_INOUT
+} in_or_out_type;
+
+#define connection_handle(db_state) (db_state -> connection_handle)
+#define environment_handle(db_state) (db_state -> environment_handle)
+#define statement_handle(db_state) (db_state -> statement_handle)
+#define columns(db_state) (db_state -> columns)
+#define nr_of_columns(db_state) (db_state -> number_of_columns)
+#define dynamic_buffer(db_state) (db_state -> dynamic_buffer)
+#define associated_result_set(db_state) (db_state -> associated_result_set)
+#define use_srollable_cursors(db_state) (db_state -> use_srollable_cursors)
+#define tuple_row(db_state) (db_state -> tuple_row)
+#define exists_more_result_sets(db_state) (db_state -> exists_more_result_sets)
+#define param_query(db_state) (db_state -> param_query)
+#define out_params(db_state) (db_state -> out_params)