@miatechnet/node-odbc 2.4.17 → 2.4.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/odbc.d.ts CHANGED
@@ -13,7 +13,13 @@ declare namespace odbc {
13
13
  count: number;
14
14
  columns: Array<ColumnDefinition>;
15
15
  statement: string;
16
- parameters: Array<number|string>;
16
+ parameters: Array<number | string>;
17
+ return: number;
18
+ }
19
+
20
+ class ProcedureResult<T> extends Array<Result<T>> {
21
+ statement: string;
22
+ parameters: Array<number | string>;
17
23
  return: number;
18
24
  }
19
25
 
@@ -35,7 +41,7 @@ declare namespace odbc {
35
41
 
36
42
  prepare(sql: string, callback: (error: NodeOdbcError) => undefined): undefined;
37
43
 
38
- bind(parameters: Array<number|string>, callback: (error: NodeOdbcError) => undefined): undefined;
44
+ bind(parameters: Array<number | string>, callback: (error: NodeOdbcError) => undefined): undefined;
39
45
 
40
46
  execute<T>(callback: (error: NodeOdbcError, result: Result<T>) => undefined): undefined;
41
47
 
@@ -47,7 +53,7 @@ declare namespace odbc {
47
53
 
48
54
  prepare(sql: string): Promise<void>;
49
55
 
50
- bind(parameters: Array<number|string>): Promise<void>;
56
+ bind(parameters: Array<number | string>): Promise<void>;
51
57
 
52
58
  execute<T>(): Promise<Result<T>>;
53
59
 
@@ -71,14 +77,14 @@ declare namespace odbc {
71
77
  }
72
78
 
73
79
  interface QueryOptions {
74
- cursor?: boolean|string;
80
+ cursor?: boolean | string;
75
81
  fetchSize?: number;
76
82
  timeout?: number;
77
83
  initialBufferSize?: number;
78
84
  }
79
85
 
80
86
  interface CursorQueryOptions extends QueryOptions {
81
- cursor: boolean|string
87
+ cursor: boolean | string
82
88
  }
83
89
 
84
90
  class Connection {
@@ -87,22 +93,22 @@ declare namespace odbc {
87
93
  // Callbacks ///////////////////////////////////////////////////////////
88
94
  ////////////////////////////////////////////////////////////////////////////
89
95
  query<T>(sql: string, callback: (error: NodeOdbcError, result: Result<T>) => undefined): undefined;
90
- query<T>(sql: string, parameters: Array<number|string>, callback: (error: NodeOdbcError, result: Result<T> | Cursor) => undefined): undefined;
96
+ query<T>(sql: string, parameters: Array<number | string>, callback: (error: NodeOdbcError, result: Result<T> | Cursor) => undefined): undefined;
91
97
  query<T, O extends QueryOptions>(sql: string, options: O, callback: (error: NodeOdbcError, result: O extends CursorQueryOptions ? Cursor : Result<T>) => undefined): undefined;
92
- query<T, O extends QueryOptions>(sql: string, parameters: Array<number|string>, options: O, callback: (error: NodeOdbcError, result: O extends CursorQueryOptions ? Cursor : Result<T>) => undefined): undefined;
98
+ query<T, O extends QueryOptions>(sql: string, parameters: Array<number | string>, options: O, callback: (error: NodeOdbcError, result: O extends CursorQueryOptions ? Cursor : Result<T>) => undefined): undefined;
93
99
 
94
- callProcedure<T>(catalog: string|null, schema: string|null, name: string, callback: (error: NodeOdbcError, result: Result<T>) => undefined): undefined;
95
- callProcedure<T>(catalog: string|null, schema: string|null, name: string, parameters: Array<number|string>, callback: (error: NodeOdbcError, result: Result<T>) => undefined): undefined;
100
+ callProcedure<T>(catalog: string | null, schema: string | null, name: string, callback: (error: NodeOdbcError, result: ProcedureResult<T>) => undefined): undefined;
101
+ callProcedure<T>(catalog: string | null, schema: string | null, name: string, parameters: Array<number | string>, callback: (error: NodeOdbcError, result: ProcedureResult<T>) => undefined): undefined;
96
102
 
97
103
  createStatement(callback: (error: NodeOdbcError, statement: Statement) => undefined): undefined;
98
104
 
99
- primaryKeys<T>(catalog: string|null, schema: string|null, table: string|null, callback: (error: NodeOdbcError, result: Result<T>) => undefined): undefined;
105
+ primaryKeys<T>(catalog: string | null, schema: string | null, table: string | null, callback: (error: NodeOdbcError, result: Result<T>) => undefined): undefined;
100
106
 
101
- foreignKeys<T>(pkCatalog: string|null, pkSchema: string|null, pkTable: string|null, fkCatalog: string|null, fkSchema: string|null, fkTable: string|null, callback: (error: NodeOdbcError, result: Result<T>) => undefined): undefined;
107
+ foreignKeys<T>(pkCatalog: string | null, pkSchema: string | null, pkTable: string | null, fkCatalog: string | null, fkSchema: string | null, fkTable: string | null, callback: (error: NodeOdbcError, result: Result<T>) => undefined): undefined;
102
108
 
103
- tables<T>(catalog: string|null, schema: string|null, table: string|null, type: string|null, callback: (error: NodeOdbcError, result: Result<T>) => undefined): undefined;
109
+ tables<T>(catalog: string | null, schema: string | null, table: string | null, type: string | null, callback: (error: NodeOdbcError, result: Result<T>) => undefined): undefined;
104
110
 
105
- columns<T>(catalog: string|null, schema: string|null, table: string|null, column: string|null, callback: (error: NodeOdbcError, result: Result<T>) => undefined): undefined;
111
+ columns<T>(catalog: string | null, schema: string | null, table: string | null, column: string | null, callback: (error: NodeOdbcError, result: Result<T>) => undefined): undefined;
106
112
 
107
113
  setIsolationLevel(level: number, callback: (error: NodeOdbcError) => undefined): undefined;
108
114
 
@@ -118,21 +124,21 @@ declare namespace odbc {
118
124
  // Promises ////////////////////////////////////////////////////////////
119
125
  ////////////////////////////////////////////////////////////////////////////
120
126
  query<T>(sql: string): Promise<Result<T>>;
121
- query<T>(sql: string, parameters: Array<number|string>): Promise<Result<T>>;
127
+ query<T>(sql: string, parameters: Array<number | string>): Promise<Result<T>>;
122
128
  query<T, O extends QueryOptions>(sql: string, options: O): O extends CursorQueryOptions ? Promise<Cursor> : Promise<Result<T>>;
123
- query<T, O extends QueryOptions>(sql: string, parameters: Array<number|string>, options: O): O extends CursorQueryOptions ? Promise<Cursor> : Promise<Result<T>>;
129
+ query<T, O extends QueryOptions>(sql: string, parameters: Array<number | string>, options: O): O extends CursorQueryOptions ? Promise<Cursor> : Promise<Result<T>>;
124
130
 
125
- callProcedure<T>(catalog: string|null, schema: string|null, name: string, parameters?: Array<number|string>): Promise<Result<T>>;
131
+ callProcedure<T>(catalog: string | null, schema: string | null, name: string, parameters?: Array<number | string>): Promise<ProcedureResult<T>>;
126
132
 
127
133
  createStatement(): Promise<Statement>;
128
134
 
129
- primaryKeys<T>(catalog: string|null, schema: string|null, table: string|null): Promise<Result<T>>;
135
+ primaryKeys<T>(catalog: string | null, schema: string | null, table: string | null): Promise<Result<T>>;
130
136
 
131
- foreignKeys<T>(pkCatalog: string|null, pkSchema: string|null, pkTable: string|null, fkCatalog: string|null, fkSchema: string|null, fkTable: string|null): Promise<Result<T>>;
137
+ foreignKeys<T>(pkCatalog: string | null, pkSchema: string | null, pkTable: string | null, fkCatalog: string | null, fkSchema: string | null, fkTable: string | null): Promise<Result<T>>;
132
138
 
133
- tables<T>(catalog: string|null, schema: string|null, table: string|null, type: string|null): Promise<Result<T>>;
139
+ tables<T>(catalog: string | null, schema: string | null, table: string | null, type: string | null): Promise<Result<T>>;
134
140
 
135
- columns<T>(catalog: string|null, schema: string|null, table: string|null, column: string|null): Promise<Result<T>>;
141
+ columns<T>(catalog: string | null, schema: string | null, table: string | null, column: string | null): Promise<Result<T>>;
136
142
 
137
143
  setIsolationLevel(level: number): Promise<void>;
138
144
 
@@ -153,9 +159,9 @@ declare namespace odbc {
153
159
  connect(callback: (error: NodeOdbcError, connection: Connection) => undefined): undefined;
154
160
 
155
161
  query<T>(sql: string, callback: (error: NodeOdbcError, result: Result<T>) => undefined): undefined;
156
- query<T>(sql: string, parameters: Array<number|string>, callback: (error: NodeOdbcError, result: Result<T> | Cursor) => undefined): undefined;
162
+ query<T>(sql: string, parameters: Array<number | string>, callback: (error: NodeOdbcError, result: Result<T> | Cursor) => undefined): undefined;
157
163
  query<T, O extends QueryOptions>(sql: string, options: O, callback: (error: NodeOdbcError, result: O extends CursorQueryOptions ? Cursor : Result<T>) => undefined): undefined;
158
- query<T, O extends QueryOptions>(sql: string, parameters: Array<number|string>, options: O, callback: (error: NodeOdbcError, result: O extends CursorQueryOptions ? Cursor : Result<T>) => undefined): undefined;
164
+ query<T, O extends QueryOptions>(sql: string, parameters: Array<number | string>, options: O, callback: (error: NodeOdbcError, result: O extends CursorQueryOptions ? Cursor : Result<T>) => undefined): undefined;
159
165
 
160
166
  close(callback: (error: NodeOdbcError) => undefined): undefined;
161
167
 
@@ -166,9 +172,9 @@ declare namespace odbc {
166
172
  connect(): Promise<Connection>;
167
173
 
168
174
  query<T>(sql: string): Promise<Result<T>>;
169
- query<T>(sql: string, parameters: Array<number|string>): Promise<Result<T>>;
175
+ query<T>(sql: string, parameters: Array<number | string>): Promise<Result<T>>;
170
176
  query<T, O extends QueryOptions>(sql: string, options: O): O extends CursorQueryOptions ? Promise<Cursor> : Promise<Result<T>>;
171
- query<T, O extends QueryOptions>(sql: string, parameters: Array<number|string>, options: O): O extends CursorQueryOptions ? Promise<Cursor> : Promise<Result<T>>;
177
+ query<T, O extends QueryOptions>(sql: string, parameters: Array<number | string>, options: O): O extends CursorQueryOptions ? Promise<Cursor> : Promise<Result<T>>;
172
178
 
173
179
  close(): Promise<void>;
174
180
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@miatechnet/node-odbc",
3
3
  "description": "unixodbc bindings for node - Fork with multi-result set support for stored procedures",
4
- "version": "2.4.17",
4
+ "version": "2.4.20",
5
5
  "homepage": "https://github.com/ppimentela/node-odbc/",
6
6
  "main": "lib/odbc.js",
7
7
  "types": "lib/odbc.d.ts",
@@ -1887,6 +1887,25 @@ class CallProcedureAsyncWorker : public ODBCAsyncWorker {
1887
1887
  return;
1888
1888
  }
1889
1889
 
1890
+ // Skip result sets with no columns (e.g., from INSERT/UPDATE/SET statements)
1891
+ if (data->column_count == 0) {
1892
+ // No columns means this is not a SELECT-like result set, skip it
1893
+ return_code = SQLMoreResults(data->hstmt);
1894
+ if (return_code == SQL_NO_DATA) {
1895
+ hasMoreResults = false;
1896
+ } else if (!SQL_SUCCEEDED(return_code)) {
1897
+ this->errors = GetODBCErrors(SQL_HANDLE_STMT, data->hstmt);
1898
+ SetError("[odbc] Error getting more results\0");
1899
+ return;
1900
+ }
1901
+
1902
+ // Set fetch size for the next result set
1903
+ if (hasMoreResults) {
1904
+ set_fetch_size(data, data->fetch_size);
1905
+ }
1906
+ continue;
1907
+ }
1908
+
1890
1909
  // Obtener todos los datos del result set actual
1891
1910
  return_code = fetch_all_and_store(
1892
1911
  data,
@@ -1988,6 +2007,25 @@ class CallProcedureAsyncWorker : public ODBCAsyncWorker {
1988
2007
  data->bound_columns = NULL;
1989
2008
  data->row_status_array = NULL;
1990
2009
 
2010
+ // Set metadata properties on the outer allResults array for backward compatibility
2011
+ if (data->sql != NULL) {
2012
+ #ifdef UNICODE
2013
+ allResults.Set(Napi::String::New(env, STATEMENT), Napi::String::New(env, (const char16_t*)data->sql));
2014
+ #else
2015
+ allResults.Set(Napi::String::New(env, STATEMENT), Napi::String::New(env, (const char*)data->sql));
2016
+ #endif
2017
+ } else {
2018
+ allResults.Set(Napi::String::New(env, STATEMENT), env.Null());
2019
+ }
2020
+
2021
+ if (napiParameters.IsEmpty()) {
2022
+ allResults.Set(Napi::String::New(env, PARAMETERS), env.Undefined());
2023
+ } else {
2024
+ allResults.Set(Napi::String::New(env, PARAMETERS), napiParameters.Value());
2025
+ }
2026
+
2027
+ allResults.Set(Napi::String::New(env, RETURN), env.Undefined());
2028
+
1991
2029
  std::vector<napi_value> callbackArguments;
1992
2030
  callbackArguments.push_back(env.Null());
1993
2031
  callbackArguments.push_back(allResults);