@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 +30 -24
- package/package.json +1 -1
- package/src/odbc_connection.cpp +38 -0
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:
|
|
95
|
-
callProcedure<T>(catalog: string|null, schema: string|null, name: string, parameters: Array<number|string>, callback: (error: NodeOdbcError, result:
|
|
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<
|
|
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):
|
|
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):
|
|
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.
|
|
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",
|
package/src/odbc_connection.cpp
CHANGED
|
@@ -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);
|