xugusql.h 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401
  1. 
  2. #ifndef _XG_DRIVERAPI_H_
  3. #define _XG_DRIVERAPI_H_
  4. #ifdef WIN32
  5. #define XG_API __cdecl
  6. #else
  7. //linuxs about
  8. #include <stddef.h>
  9. #include <stdio.h>
  10. #include <stdlib.h>
  11. #include <unistd.h>
  12. #include <sys/socket.h>
  13. #include <netinet/in.h>
  14. #include <fcntl.h>
  15. #include <netdb.h>
  16. #include <grp.h>
  17. #include <arpa/inet.h>
  18. #include <sys/file.h>
  19. #include <sys/types.h>
  20. #include <sys/stat.h>
  21. #define XG_API
  22. #endif
  23. typedef long long int64;
  24. #ifdef __cplusplus
  25. extern "C"{
  26. #endif
  27. #define XGC_ATTR_SERVER_VERSION 1
  28. #define XGC_ATTR_DBNAME 2
  29. #define XGC_ATTR_ISO_LEVEL 3
  30. #define XGC_ATTR_SERVER_CHARSET 4
  31. #define XGC_ATTR_CLIENT_CHARSET 5
  32. #define XGC_ATTR_USESSL 6
  33. #define XGC_ATTR_SRV_TURN_IPS 7
  34. #define XGC_ATTR_TIMEZONE 8
  35. #define XGC_ATTR_LOB_DESCRIBER 9
  36. #define XGC_ATTR_AUTOCOMMIT 11
  37. #define XGC_ATTR_STMT_SERVER_CURSOR 12
  38. #define XGC_ATTR_USE_CURSOR 0
  39. #define XGC_ATTR_NOTUSE_CURSOR 1
  40. #define XGC_ATTR_USE_CURSORDEFAULT 0
  41. typedef enum tagPARAMINOUT_TYPE {
  42. PARAM_INPUT = 1,
  43. PARAM_OUTPUT = 2,
  44. PARAM_INPUTOUTPUT = 3,
  45. PARAM_RETURNVALUE = 6,
  46. }PARAMINOUT_TYPE;
  47. #define XGC_ATTR_COL_COUNT 61
  48. #define XGC_ATTR_ROW_COUNT 62
  49. #define XGC_ATTR_EFFECT_NUM 63
  50. #define XGC_ATTR_RESULT_TYPE 64
  51. #define XGC_ATTR_SQL_TYPE 65
  52. #define XGC_ATTR_IS_MUTIRESULT 66
  53. #define XGC_ISO_READONLY 1
  54. #define XGC_ISO_READCOMMIT 2
  55. #define XGC_ISO_READREPEAT 3
  56. #define XGC_ISO_SERIAL 4
  57. #define XGC_CHARSET_GBK 1
  58. #define XGC_CHARSET_GB2312 2
  59. #define XGC_CHARSET_UTF8 3
  60. #define XG_C_NULL 0
  61. #define XG_C_BOOL 1
  62. #define XG_C_CHAR 2
  63. #define XG_C_TINYINT 3
  64. #define XG_C_SHORT 4
  65. #define XG_C_INTEGER 5
  66. #define XG_C_BIGINT 6
  67. #define XG_C_FLOAT 7
  68. #define XG_C_DOUBLE 8
  69. #define XG_C_NUMERIC 9
  70. #define XG_C_DATE 10
  71. #define XG_C_TIME 11
  72. #define XG_C_TIME_TZ 12
  73. #define XG_C_DATETIME 13
  74. #define XG_C_DATETIME_TZ 14
  75. #define XG_C_BINARY 15
  76. #define DATETIME_ASLONG 23
  77. #define XG_C_NVARBINARY 18
  78. #define XG_C_REFCUR 58
  79. #define XG_C_CHARN1 63
  80. #define XG_C_NCHAR 62 /* only for c# wchar use */
  81. #define XG_C_INTERVAL 21
  82. #define XG_C_INTERVAL_YEAR_TO_MONTH 28
  83. #define XG_C_INTERVAL_DAY_TO_SECOND 31
  84. #define XG_C_TIMESTAMP XG_C_DATETIME
  85. #define XG_C_LOB 40
  86. #define XG_C_CLOB 41
  87. #define XG_C_BLOB 42
  88. #define XG_SUCCESS 0
  89. #define XG_NO_DATA 100
  90. #define XG_ERROR -1
  91. #define XG_NET_ERROR -4
  92. #define XG_INVALID_ARG -3
  93. #define XG_SOCKET_ERROR -8
  94. #define XG_LOGIN_ERROR -9
  95. #define XG_NULL_DATA -11
  96. #define XG_TRUNCATED_DATA -12
  97. #define XG_DATATYPE_ERROR -13 /* Data type cannot be converted */
  98. #define XG_FLOW_DATA -14 /* Data type out of bounds */
  99. #define XG_COL_SEQ_ERR -15 /* Data serial number out of bounds */
  100. #define XG_COL_EXCEPT_DATAOFF -18 /* Data offset out of bounds */
  101. #define XG_COL_DATA_OVERFLOW 98
  102. int XG_API SetConnStr(char* str, void** p_conn);
  103. int XG_API GetConnStr(char* str, void** p_conn);
  104. /* return :
  105. * 2 : Successful connection
  106. * -1 : Connection string incoming error
  107. * -8 : Failed to create sock
  108. * -9 : Login database failed
  109. * */
  110. int XG_API XGC_OpenConn(char* Conn_str,void** p_conn);
  111. /* return :
  112. * 0 : Success
  113. * -1 : Fail
  114. * */
  115. int XG_API XGC_CloseConn(void** p_conn);
  116. /* return :
  117. * 2 : Successful connection
  118. * -3 : Parameter error
  119. * -8 : Failed to create sock
  120. * -9 : Login database failed
  121. * */
  122. int XG_API XGC_OpenConn_Ips(char* Conn_str,int ntimes,void** turnIP_attrs,void** p_conn);
  123. /* Explicitly create parameters
  124. * return :
  125. * 0 : Success
  126. * -3 : Parameter error
  127. * */
  128. int XG_API XGC_CreateParams(void** p_params);
  129. /* Reset parameters in connection
  130. * Note: explicitly created parameters will not be processed
  131. * */
  132. int XG_API XGC_ResetParams(void** p_conn);
  133. /* Bind explicitly created parameters to the connection */
  134. /* X//将显式创建的参数绑定到连接上
  135. * 配合 XGC_CreateParams 使用
  136. * p_conn 连接指针
  137. * p_params 显式创建的参数结构指针
  138. *返回值 成功返回0 参数错误 传入类型不匹配 返回 -3 ;
  139. */
  140. int XG_API XGC_BindParams2Conn(void** p_conn,void** p_params);
  141. int XG_API XGC_BindParamByName(void** p_conn, char* param_name, int param_type,
  142. int datatype, void* value, int param_size, int* rt_code, int* rlen_val);
  143. /* 参数 按名进行批量绑定
  144. * p_conn 连接句柄 或显式申明的参数句柄
  145. * param_name 参数在sql中的名
  146. * param_num sql中 按名绑定参数的个数
  147. * param_type 参数输入输出型 1 输入 2 输出 3输入输出 6 返回值 ,
  148. * datatype 参数C类型
  149. * array_size 参数数组长度-参数的批量的个数
  150. * array_value 参数数组 首地址
  151. * param_size 参数固定长度, 变长的填入总体长度( 内部 长度值 长度值 这样)
  152. * rlen_val int型 数组 存放参数数组中 数组内每个元素的实际长度 按组元序号对应
  153. 返回值:正确返回 0 错误返回 -1 ,参数传入错误返回-3 ,参数名错误 -53 ;
  154. */
  155. int XG_API XGC_BindParamArrayByName(void** p_conn, char* param_name,int param_num,
  156. int param_type,int datatype, int array_size, void* array_value,
  157. int param_size, int * rlen_val);
  158. //按序号绑定 2 种用法
  159. /*=====================================
  160. * p_conn 连接句柄 (隐式参数句柄) 2 p_conn 参数句柄(显式创建参数句柄)
  161. * param_no 参数号: 从1开始
  162. * param_type 参数输入输出型 1236
  163. * datatype 参数数据类型
  164. * value 参数值
  165. * param_size 单个参数的空间大小 buffer
  166. * rlen_val 具体的每个参数 的对应实际大小
  167. 返回值 正确返回 0 ;传入指针参数错误 返回 -3 ;参数序号超界 -51; 参数输入输出型错:-52 ;参数号小于1 -54 ;参数跳跃未按序 -55; 尚未实现功能 -8;
  168. ======================================*/
  169. int XG_API XGC_BindParamByPos(void** p_conn, int param_no,int param_type,
  170. int datatype, void* value, int param_size, int * rlen_val);
  171. /*批量按序号绑定
  172. * p_conn 连接句柄 或显式申明的参数句柄
  173. * param_no 参数号 从1 开始
  174. * param_num sql中 按名绑定参数的个数
  175. * param_type 参数输入输出型 1 输入 2 输出 3输入输出 6 返回值 ,
  176. * datatype 参数C类型
  177. * array_size 参数数组长度-参数的批量的个数
  178. * array_value 参数数组 首地址
  179. * param_size 参数固定长度, 变长的填入总体长度( 内部 长度值 长度值 这样)
  180. * rlen_val int型 数组 存放参数数组中 数组内每个元素的实际长度 按组元序号对应
  181. * 返回值:正确返回 0;传入指针参数错误 返回 -3 ;参数序号超界 -51; 参数输入输出型错:-52 ;参数号小于1 -54 ; 尚未实现功能 -8;
  182. */
  183. int XG_API XGC_BindParamArrayByPos(void** p_conn, int param_no, int param_num,
  184. int param_type,int datatype, int array_size, void* array_value, int param_size, int * rlen_val);
  185. /* SQL execution without result set return */
  186. /* 无结果集返回的sql执行 --支持DDL ,insert update ,delete等执行
  187. * p_conn 连接指针 ,cmd_sql sql语句 ,如sql里面有参数 请提前在 p_conn连接句柄里面绑定
  188. *返回值: update 和delete时 返回影响的行数 ,insert 返回插入行数, 其他成功返回0 ,一般错误返回-1 ; 网络错 -4;
  189. 无结果集返回的执行,最多支持影响的行数 rowid 这些
  190. */
  191. int XG_API XGC_Execute_no_query(void** p_conn,char* cmd_sql);
  192. /* 查询 返回首行首列
  193. *查询简便化封装,返回结果集的首行首列 --
  194. 根据type 来解析re_val 数据为数值的是定长 数据是变长的 re_val 为长度(4字节int)+指向数据的指针 (或者是数组)
  195. * p_conn 连接指针 ,cmd_sql sql语句 常为 select count(*) 等
  196. * re_val 存放值的buffer缓存区, 一般为字符串返回。
  197. * type 空值 时返回 0 ,,如果值为101 说明buff空间不足返回的是指向值的指针
  198. 返回值 :成功 返回 0 网络错 -4;一般错误 -1; ,insert返回1 ,update 返回2 ;delete 返回3 ;
  199. */
  200. int XG_API XGC_Execute_query_with_one(void** p_conn ,char* cmd_sql,void* re_val,int* type);
  201. /* usage: prepare name can be given a specific name or NULL
  202. * (1) If the SQL statement is a query, the prepare_name parameter can
  203. * be given a specific value.
  204. * (2) If the SQL statement is not a query, the prepare_name parameter
  205. * must be NULL
  206. * */
  207. int XG_API XGC_Prepare2(void** p_conn,char* cmd_sql,char* prepare_name);
  208. /* usage:
  209. * (1) If the SQL statement is a query, when both prepare_name and servercursor_name
  210. * are given as NULL, it means that the server cursor is not used.
  211. * (2) If the SQL statement is a query, when prepare_name and servercursor_name are
  212. * given specific values, it means that the server cursor is used.
  213. *
  214. * notice:
  215. * If the 'prepare_name' parameter in the 'XGC_Prepare2' phase is NULL,
  216. * then the 'prepare_name' in 'XGC_Execute2' must also be NULL.
  217. * */
  218. int XG_API XGC_Execute2(void** p_conn, char* prepare_name, char* servercursor_name,void** pres);
  219. int XG_API XGC_ExecBatch(void** p_conn,char* cmd_sql, int ArrayCount);
  220. int XG_API XGC_UnPrepare(void** p_conn,char* prepare_name);
  221. /* 关闭服务器端游标
  222. *p_conn 连接指针, * cursor_name 游标名 ,游标释放应 在unprepare之前调用
  223. * 返回值 成功返回0 失败返回-1 ;网络错 返回-4 ;
  224. */
  225. int XG_API XGC_CloseCursor(void** p_conn,char* cursor_name);
  226. /*带返回结果集的 查询语句执行 生成reader
  227. * *p_conn 连接指针,* cmd_sql 查询sql语句 ,
  228. * * p_res 返回的结果集指针 ,
  229. * 输出型参数 field_num 结果集的列数 , rowcount 结果集的行数 effected_num: update delete 影响的行数 ,无则不填,
  230. *返回值 成功返回0 ;网络错返回-4 ;失败返回-1 ;
  231. */
  232. int XG_API XGC_ExecwithDataReader(void** p_conn ,char* cmd_sql,void** p_res,
  233. int* field_num,int64* rowcount,int* effected_num);
  234. /*
  235. * Get result set from server cursor
  236. * int XG_API XGC_FetchServerCursorRowset(void** p_conn ,char* cmd_sql,void** p_res);
  237. *
  238. * */
  239. int XG_API XGC_FetchServerCursorRowset(void** p_conn ,char* servercursor_name,void** p_res);
  240. int XG_API XGC_FetchServerCursorRowset_V2(void** p_conn, char* sql_cmd, void** p_res);
  241. /* Fetching data from the server cursor header (extra)*/
  242. int XG_API XGC_FetchRefCursorHead(void** p_conn ,char* Cursor_name ,void** p_res,
  243. int* field_num,int64* rowcount,int* cached);
  244. /* 服务器游标获取数据 XGC_Prepare2+XGC_Execute2 (冗余项)
  245. * *p_conn 连接指针,* cmd_sql 需要游标执行的 select 查询sql语句
  246. * Cursor_name 服务器端游标名 由用户自行命名后传入
  247. * * p_res 返回的结果集指针 ,输出型参数 field_num 结果集的列数 , rowcount 结果集的行数 effected_num: update delete 影响的行数
  248. * 正常返回0 失败返回-1
  249. */
  250. int XG_API XGC_ExecwithServerCursorReader(void** p_conn ,char* cmd_sql,
  251. char* Cursor_name ,void** p_res,int* field_num,int64* rowcount,int* effected_num);
  252. /*
  253. * Execution of stored procedures and functions,
  254. * involving input and output of parameters
  255. * */
  256. int XG_API XGC_Execute_procesure(void** p_conn , char* cmd_sql,void* para);
  257. /*
  258. * RESULT
  259. *
  260. * */
  261. int XG_API XGC_GetData(void** pTr_Result,int col_no,int TarCtype,
  262. void* TarValuePtr,int BuffLen,int* lenPtr);
  263. int XG_API XGC_getResultcolType(void** pTr_Result,int col_no,int* col_type) ;
  264. int XG_API XGC_getResultcolname(void** pTr_Result,int col_no,char* col_name) ;
  265. int XG_API XGC_getResultcolseq(void** pTr_Result,char* col_name);
  266. /* 返回结果集的列个数
  267. 输出参数 field_num 返回结果集列个数
  268. 正常返回 0 ,输入结果集类型异常返回 -3
  269. */
  270. int XG_API XGC_getResultColumnsnum(void** pTr_Result,int* field_num);
  271. /* 返回结果集 行数
  272. ** pTr_Result 结果集指针
  273. * 输出参数 record_num 返回结果集 行数
  274. * 正常返回 0 ,输入结果集类型异常返回 -3
  275. */
  276. int XG_API XGC_getResultRecordnum(void** pTr_Result,int* record_num);
  277. int XG_API XGC_getResultcolmodi(void** pTr_Result, int col_no, int* modi);//add 202-02-19
  278. int XG_API XGC_getResultColInfo(void** pTr_Result,int col_no,
  279. char* col_Tabname, char* col_name, char* col_alias, int* datatype,
  280. int* col_modi,int* col_flag);
  281. /* Result set cursor moves to the next result set */
  282. int XG_API XGC_ReadNext(void** p_res);
  283. /* Release result set */
  284. int XG_API XGC_FreeRowset(void** p_res);
  285. /*
  286. * Get the next result set, suitable for multiple result sets
  287. * */
  288. int XG_API XGC_NextResult(void** p_res);
  289. /* Attribute */
  290. int XG_API XGC_GetAttr(void** hd_ptr, int attrtype, void * ValuePtr,
  291. int BuffLen, int* ret_attr_type, int* re_len);
  292. int XG_API XGC_SetAttr(void** hd_ptr, int attrtype, const void * ValuePtr, int BuffLen);
  293. /*
  294. * BLOB\CLOB
  295. * */
  296. int XG_API XGC_Create_Lob(void** Lob_ptr);
  297. int XG_API XGC_Put_Lob_data(void** Lob_ptr, void* data, int len );
  298. int XG_API XGC_Get_Lob_data(void** Lob_ptr, void* data, int len);
  299. int XG_API XGC_Distroy_Lob(void** Lob_ptr);
  300. int XG_API XGC_LobWrite_SetPos(void** Lob_ptr,int setpos);
  301. int XG_API XGC_LobRead_SetPos(void** Lob_ptr,int setpos);
  302. int XG_API XGC_Reset_Lob(void** Lob_ptr);
  303. /*
  304. * ERROR INFO
  305. * */
  306. int XG_API XGC_GetError(void** hd_ptr, char* err_text,int* rlen);
  307. int XG_API XGC_GetErrorInfo(void** p_handptr, char* ccode, char* errmessage, int* rlen);
  308. int XG_API XGC_GetErrorInfoOption(void** p_handptr, char* ccode, int * ret_code,
  309. char* errmessage, int max_message_len, int* rlen);
  310. /*
  311. * OTHER
  312. *
  313. * */
  314. void XG_API XGC_FreePtr(void**Ptr);
  315. /* 释放对象资源 --可用对象有 连接, 结果集 ,显式参数结构指针 ,大对象
  316. * *Ptr_obj 对象指针地址传入
  317. */
  318. void XG_API XGC_Drop(void**Ptr_obj);
  319. int XG_API dt2dtm_Api(long long t,char * p_dt);
  320. int XG_API Release_IpsAttrs(void** pconn_IpsAttr);//ips=
  321. int XG_API fun_sql_type(char* sql);
  322. /* 重置对象资源 -包括连接中显式参数结构和大对象
  323. * 不包括结果集
  324. * Ptr_obj 对象指针地址
  325. */
  326. int XG_API XGC_Reset(void**Ptr_obj);
  327. /*/
  328. 获取结果集类型,并根据结果集的类型 type 不同: 返回 结果集的行,列数, update delete 影响的行数 ,insert 返回的 rowid值
  329. // insert_rowid 为 char(24)的字符串
  330. * 返回值 成功返回0 ,参数错误 返回-3;
  331. */
  332. int XG_API XGC_getResultRet(void** pTr_Result,int * type,
  333. int* field_num,int * rowcount, int *effected_num ,char* insert_rowid);
  334. /* Get the rowid of the last insert operation */
  335. int XG_API XGC_GetLastInsertId(void** p_conn, char* insert_rowid);
  336. int XG_API XGC_GetFunReturnType(void** p_conn, int * type);
  337. #ifdef __cplusplus
  338. }
  339. #endif
  340. #endif