@elaraai/east-node-io 0.0.1-beta.8 → 1.0.0
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/CLA.md +1 -1
- package/CONTRIBUTING.md +3 -3
- package/LICENSE.md +31 -0
- package/README.md +56 -19
- package/dist/{compression → src/compression}/gzip.d.ts +1 -1
- package/dist/src/compression/gzip.d.ts.map +1 -0
- package/dist/{compression → src/compression}/gzip.js +3 -3
- package/dist/src/compression/gzip.js.map +1 -0
- package/dist/{compression → src/compression}/index.d.ts +16 -16
- package/dist/src/compression/index.d.ts.map +1 -0
- package/dist/src/compression/index.js.map +1 -0
- package/dist/{compression → src/compression}/tar.d.ts +2 -2
- package/dist/src/compression/tar.d.ts.map +1 -0
- package/dist/{compression → src/compression}/tar.js +7 -7
- package/dist/src/compression/tar.js.map +1 -0
- package/dist/{compression → src/compression}/types.d.ts +10 -10
- package/dist/src/compression/types.d.ts.map +1 -0
- package/dist/src/compression/types.js.map +1 -0
- package/dist/{compression → src/compression}/zip.d.ts +3 -3
- package/dist/src/compression/zip.d.ts.map +1 -0
- package/dist/{compression → src/compression}/zip.js +4 -4
- package/dist/src/compression/zip.js.map +1 -0
- package/dist/src/connection/index.d.ts.map +1 -0
- package/dist/{connection → src/connection}/index.js +2 -2
- package/dist/src/connection/index.js.map +1 -0
- package/dist/{format → src/format}/index.d.ts +77 -77
- package/dist/src/format/index.d.ts.map +1 -0
- package/dist/src/format/index.js.map +1 -0
- package/dist/{format → src/format}/types.d.ts +53 -53
- package/dist/src/format/types.d.ts.map +1 -0
- package/dist/src/format/types.js.map +1 -0
- package/dist/{format → src/format}/xlsx.d.ts +20 -20
- package/dist/src/format/xlsx.d.ts.map +1 -0
- package/dist/{format → src/format}/xlsx.js +6 -6
- package/dist/src/format/xlsx.js.map +1 -0
- package/dist/{format → src/format}/xml.d.ts +54 -54
- package/dist/src/format/xml.d.ts.map +1 -0
- package/dist/{format → src/format}/xml.js +14 -14
- package/dist/src/format/xml.js.map +1 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js.map +1 -0
- package/dist/{nosql → src/nosql}/index.d.ts +20 -20
- package/dist/src/nosql/index.d.ts.map +1 -0
- package/dist/src/nosql/index.js.map +1 -0
- package/dist/{nosql → src/nosql}/mongodb.d.ts +5 -5
- package/dist/src/nosql/mongodb.d.ts.map +1 -0
- package/dist/{nosql → src/nosql}/mongodb.js +8 -8
- package/dist/src/nosql/mongodb.js.map +1 -0
- package/dist/{nosql → src/nosql}/redis.d.ts +5 -5
- package/dist/src/nosql/redis.d.ts.map +1 -0
- package/dist/{nosql → src/nosql}/redis.js +6 -6
- package/dist/src/nosql/redis.js.map +1 -0
- package/dist/{nosql → src/nosql}/types.d.ts +10 -10
- package/dist/src/nosql/types.d.ts.map +1 -0
- package/dist/src/nosql/types.js.map +1 -0
- package/dist/src/platform.d.ts.map +1 -0
- package/dist/{platform.js → src/platform.js} +2 -0
- package/dist/src/platform.js.map +1 -0
- package/dist/src/sql/access.d.ts +243 -0
- package/dist/src/sql/access.d.ts.map +1 -0
- package/dist/src/sql/access.js +427 -0
- package/dist/src/sql/access.js.map +1 -0
- package/dist/src/sql/index.d.ts +1112 -0
- package/dist/src/sql/index.d.ts.map +1 -0
- package/dist/{sql → src/sql}/index.js +296 -4
- package/dist/src/sql/index.js.map +1 -0
- package/dist/{sql → src/sql}/mysql.d.ts +110 -32
- package/dist/src/sql/mysql.d.ts.map +1 -0
- package/dist/{sql → src/sql}/mysql.js +207 -6
- package/dist/src/sql/mysql.js.map +1 -0
- package/dist/{sql → src/sql}/postgres.d.ts +110 -32
- package/dist/src/sql/postgres.d.ts.map +1 -0
- package/dist/{sql → src/sql}/postgres.js +199 -6
- package/dist/src/sql/postgres.js.map +1 -0
- package/dist/{sql → src/sql}/sqlite.d.ts +108 -30
- package/dist/src/sql/sqlite.d.ts.map +1 -0
- package/dist/{sql → src/sql}/sqlite.js +209 -6
- package/dist/src/sql/sqlite.js.map +1 -0
- package/dist/src/sql/types.d.ts +269 -0
- package/dist/src/sql/types.d.ts.map +1 -0
- package/dist/{sql → src/sql}/types.js +65 -1
- package/dist/src/sql/types.js.map +1 -0
- package/dist/{storage → src/storage}/index.d.ts +63 -63
- package/dist/src/storage/index.d.ts.map +1 -0
- package/dist/{storage → src/storage}/index.js +1 -1
- package/dist/src/storage/index.js.map +1 -0
- package/dist/{storage → src/storage}/s3.d.ts +56 -49
- package/dist/src/storage/s3.d.ts.map +1 -0
- package/dist/{storage → src/storage}/s3.js +24 -15
- package/dist/src/storage/s3.js.map +1 -0
- package/dist/{storage → src/storage}/types.d.ts +18 -18
- package/dist/src/storage/types.d.ts.map +1 -0
- package/dist/src/storage/types.js.map +1 -0
- package/dist/{transfer → src/transfer}/ftp.d.ts +10 -10
- package/dist/src/transfer/ftp.d.ts.map +1 -0
- package/dist/{transfer → src/transfer}/ftp.js +6 -6
- package/dist/src/transfer/ftp.js.map +1 -0
- package/dist/{transfer → src/transfer}/index.d.ts +40 -40
- package/dist/src/transfer/index.d.ts.map +1 -0
- package/dist/src/transfer/index.js.map +1 -0
- package/dist/{transfer → src/transfer}/sftp.d.ts +10 -10
- package/dist/src/transfer/sftp.d.ts.map +1 -0
- package/dist/{transfer → src/transfer}/sftp.js +6 -6
- package/dist/src/transfer/sftp.js.map +1 -0
- package/dist/{transfer → src/transfer}/types.d.ts +15 -15
- package/dist/src/transfer/types.d.ts.map +1 -0
- package/dist/src/transfer/types.js.map +1 -0
- package/package.json +37 -53
- package/dist/compression/gzip.d.ts.map +0 -1
- package/dist/compression/gzip.js.map +0 -1
- package/dist/compression/index.d.ts.map +0 -1
- package/dist/compression/index.js.map +0 -1
- package/dist/compression/tar.d.ts.map +0 -1
- package/dist/compression/tar.js.map +0 -1
- package/dist/compression/types.d.ts.map +0 -1
- package/dist/compression/types.js.map +0 -1
- package/dist/compression/zip.d.ts.map +0 -1
- package/dist/compression/zip.js.map +0 -1
- package/dist/connection/index.d.ts.map +0 -1
- package/dist/connection/index.js.map +0 -1
- package/dist/format/index.d.ts.map +0 -1
- package/dist/format/index.js.map +0 -1
- package/dist/format/types.d.ts.map +0 -1
- package/dist/format/types.js.map +0 -1
- package/dist/format/xlsx.d.ts.map +0 -1
- package/dist/format/xlsx.js.map +0 -1
- package/dist/format/xml.d.ts.map +0 -1
- package/dist/format/xml.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/nosql/index.d.ts.map +0 -1
- package/dist/nosql/index.js.map +0 -1
- package/dist/nosql/mongodb.d.ts.map +0 -1
- package/dist/nosql/mongodb.js.map +0 -1
- package/dist/nosql/redis.d.ts.map +0 -1
- package/dist/nosql/redis.js.map +0 -1
- package/dist/nosql/types.d.ts.map +0 -1
- package/dist/nosql/types.js.map +0 -1
- package/dist/platform.d.ts.map +0 -1
- package/dist/platform.js.map +0 -1
- package/dist/sql/index.d.ts +0 -777
- package/dist/sql/index.d.ts.map +0 -1
- package/dist/sql/index.js.map +0 -1
- package/dist/sql/mysql.d.ts.map +0 -1
- package/dist/sql/mysql.js.map +0 -1
- package/dist/sql/postgres.d.ts.map +0 -1
- package/dist/sql/postgres.js.map +0 -1
- package/dist/sql/sqlite.d.ts.map +0 -1
- package/dist/sql/sqlite.js.map +0 -1
- package/dist/sql/types.d.ts +0 -205
- package/dist/sql/types.d.ts.map +0 -1
- package/dist/sql/types.js.map +0 -1
- package/dist/storage/index.d.ts.map +0 -1
- package/dist/storage/index.js.map +0 -1
- package/dist/storage/s3.d.ts.map +0 -1
- package/dist/storage/s3.js.map +0 -1
- package/dist/storage/types.d.ts.map +0 -1
- package/dist/storage/types.js.map +0 -1
- package/dist/transfer/ftp.d.ts.map +0 -1
- package/dist/transfer/ftp.js.map +0 -1
- package/dist/transfer/index.d.ts.map +0 -1
- package/dist/transfer/index.js.map +0 -1
- package/dist/transfer/sftp.d.ts.map +0 -1
- package/dist/transfer/sftp.js.map +0 -1
- package/dist/transfer/types.d.ts.map +0 -1
- package/dist/transfer/types.js.map +0 -1
- package/dist/tsconfig.tsbuildinfo +0 -1
- /package/dist/{compression → src/compression}/index.js +0 -0
- /package/dist/{compression → src/compression}/types.js +0 -0
- /package/dist/{connection → src/connection}/index.d.ts +0 -0
- /package/dist/{format → src/format}/index.js +0 -0
- /package/dist/{format → src/format}/types.js +0 -0
- /package/dist/{index.d.ts → src/index.d.ts} +0 -0
- /package/dist/{index.js → src/index.js} +0 -0
- /package/dist/{nosql → src/nosql}/index.js +0 -0
- /package/dist/{nosql → src/nosql}/types.js +0 -0
- /package/dist/{platform.d.ts → src/platform.d.ts} +0 -0
- /package/dist/{storage → src/storage}/types.js +0 -0
- /package/dist/{transfer → src/transfer}/index.js +0 -0
- /package/dist/{transfer → src/transfer}/types.js +0 -0
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
*
|
|
11
11
|
* @packageDocumentation
|
|
12
12
|
*/
|
|
13
|
-
import { BlobType, BooleanType, DateTimeType, East, FloatType, IntegerType, isValueOf, match, NullType, SortedMap, StringType as EastStringType, variant } from "@elaraai/east";
|
|
13
|
+
import { ArrayType, BlobType, BooleanType, DateTimeType, East, FloatType, IntegerType, isTypeValueEqual, isValueOf, match, NullType, OptionType, SortedMap, StringType as EastStringType, toEastTypeValue, variant } from "@elaraai/east";
|
|
14
14
|
import { EastError } from "@elaraai/east/internal";
|
|
15
15
|
import mysql from 'mysql2/promise';
|
|
16
16
|
import { createHandle, getConnection, closeHandle, closeAllHandles } from '../connection/index.js';
|
|
@@ -130,6 +130,76 @@ export const mysql_connect = East.asyncPlatform("mysql_connect", [MySqlConfigTyp
|
|
|
130
130
|
* - Returns lastInsertId for INSERT operations
|
|
131
131
|
*/
|
|
132
132
|
export const mysql_query = East.asyncPlatform("mysql_query", [ConnectionHandleType, StringType, SqlParametersType], SqlResultType);
|
|
133
|
+
/**
|
|
134
|
+
* Executes a SELECT query with user-defined return type.
|
|
135
|
+
*
|
|
136
|
+
* Runs a SELECT query against a MySQL database with parameter binding and
|
|
137
|
+
* returns results as an array of typed rows. The return type is generic,
|
|
138
|
+
* allowing users to specify the expected row structure for type-safe access.
|
|
139
|
+
*
|
|
140
|
+
* This is a generic platform function for the East language, enabling type-safe
|
|
141
|
+
* SELECT queries in East programs running on Node.js.
|
|
142
|
+
*
|
|
143
|
+
* @typeParam T - The expected row type for query results
|
|
144
|
+
* @param handle - Connection handle from mysql_connect()
|
|
145
|
+
* @param sql - SQL SELECT query string with ? placeholders
|
|
146
|
+
* @param params - Query parameters as SqlParameterType array
|
|
147
|
+
* @returns Array of rows matching the specified type T
|
|
148
|
+
*
|
|
149
|
+
* @throws {EastError} When query fails due to:
|
|
150
|
+
* - Invalid connection handle (location: "mysql_select")
|
|
151
|
+
* - SQL syntax errors (location: "mysql_select")
|
|
152
|
+
* - Query is not a SELECT (location: "mysql_select")
|
|
153
|
+
* - Type coercion failure (location: "mysql_select")
|
|
154
|
+
*
|
|
155
|
+
* @example
|
|
156
|
+
* ```ts
|
|
157
|
+
* import { East, NullType, StructType, StringType, IntegerType, variant } from "@elaraai/east";
|
|
158
|
+
* import { SQL } from "@elaraai/east-node-io";
|
|
159
|
+
*
|
|
160
|
+
* // Define the expected row type
|
|
161
|
+
* const UserRowType = StructType({
|
|
162
|
+
* id: IntegerType,
|
|
163
|
+
* name: StringType,
|
|
164
|
+
* email: StringType,
|
|
165
|
+
* });
|
|
166
|
+
*
|
|
167
|
+
* const queryUsers = East.function([], NullType, ($) => {
|
|
168
|
+
* const config = $.let({
|
|
169
|
+
* host: "localhost",
|
|
170
|
+
* port: 3306n,
|
|
171
|
+
* database: "myapp",
|
|
172
|
+
* user: "root",
|
|
173
|
+
* password: "secret",
|
|
174
|
+
* ssl: variant('none', null),
|
|
175
|
+
* maxConnections: variant('none', null),
|
|
176
|
+
* });
|
|
177
|
+
*
|
|
178
|
+
* const conn = $.let(SQL.MySQL.connect(config));
|
|
179
|
+
*
|
|
180
|
+
* // Query with typed results - returns Array<UserRowType>
|
|
181
|
+
* const users = $.let(SQL.MySQL.select([UserRowType], conn,
|
|
182
|
+
* "SELECT id, name, email FROM users WHERE active = ?",
|
|
183
|
+
* [variant('Boolean', true)]
|
|
184
|
+
* ));
|
|
185
|
+
* // users is typed as Array<{ id: bigint, name: string, email: string }>
|
|
186
|
+
*
|
|
187
|
+
* $(SQL.MySQL.close(conn));
|
|
188
|
+
* $.return(null);
|
|
189
|
+
* });
|
|
190
|
+
*
|
|
191
|
+
* const compiled = East.compileAsync(queryUsers.toIR(), SQL.MySQL.Implementation);
|
|
192
|
+
* await compiled();
|
|
193
|
+
* ```
|
|
194
|
+
*
|
|
195
|
+
* @remarks
|
|
196
|
+
* - Only SELECT queries are supported (use mysql_query for INSERT/UPDATE/DELETE)
|
|
197
|
+
* - Uses ? for parameter placeholders
|
|
198
|
+
* - Row type T should match the structure of selected columns
|
|
199
|
+
* - All MySQL data types are mapped to appropriate East types
|
|
200
|
+
* - NULL values are preserved in the result
|
|
201
|
+
*/
|
|
202
|
+
export const mysql_select = East.asyncGenericPlatform("mysql_select", ["T"], [ConnectionHandleType, StringType, SqlParametersType], ArrayType("T"));
|
|
133
203
|
/**
|
|
134
204
|
* Closes a MySQL connection pool.
|
|
135
205
|
*
|
|
@@ -292,7 +362,7 @@ export const MySqlImpl = [
|
|
|
292
362
|
}
|
|
293
363
|
catch (err) {
|
|
294
364
|
throw new EastError(`MySQL connection failed: ${err.message}`, {
|
|
295
|
-
location: { filename: "mysql_connect", line: 0n, column: 0n },
|
|
365
|
+
location: [{ filename: "mysql_connect", line: 0n, column: 0n }],
|
|
296
366
|
cause: err
|
|
297
367
|
});
|
|
298
368
|
}
|
|
@@ -330,7 +400,7 @@ export const MySqlImpl = [
|
|
|
330
400
|
// Validate ResultSetHeader structure
|
|
331
401
|
if (typeof result.affectedRows !== 'number') {
|
|
332
402
|
throw new EastError('MySQL ResultSetHeader missing affectedRows', {
|
|
333
|
-
location: { filename: "mysql_query", line: 0n, column: 0n }
|
|
403
|
+
location: [{ filename: "mysql_query", line: 0n, column: 0n }]
|
|
334
404
|
});
|
|
335
405
|
}
|
|
336
406
|
// Determine query type from SQL
|
|
@@ -363,13 +433,144 @@ export const MySqlImpl = [
|
|
|
363
433
|
else {
|
|
364
434
|
// Unexpected result type
|
|
365
435
|
throw new EastError(`Unexpected result type from MySQL query: ${typeof rows}`, {
|
|
366
|
-
location: { filename: "mysql_query", line: 0n, column: 0n }
|
|
436
|
+
location: [{ filename: "mysql_query", line: 0n, column: 0n }]
|
|
367
437
|
});
|
|
368
438
|
}
|
|
369
439
|
}
|
|
370
440
|
catch (err) {
|
|
371
441
|
throw new EastError(`MySQL query failed: ${err.message}`, {
|
|
372
|
-
location: { filename: "mysql_query", line: 0n, column: 0n },
|
|
442
|
+
location: [{ filename: "mysql_query", line: 0n, column: 0n }],
|
|
443
|
+
cause: err
|
|
444
|
+
});
|
|
445
|
+
}
|
|
446
|
+
}),
|
|
447
|
+
mysql_select.implement((T) => async (...args) => {
|
|
448
|
+
const handle = args[0];
|
|
449
|
+
const sql = args[1];
|
|
450
|
+
const params = args[2];
|
|
451
|
+
const rowType = T;
|
|
452
|
+
try {
|
|
453
|
+
const pool = getConnection(handle);
|
|
454
|
+
// Validate row type is a Struct
|
|
455
|
+
if (rowType.type !== 'Struct') {
|
|
456
|
+
throw new EastError(`Expected row type must be a Struct, got ${rowType.type}`, { location: [{ filename: "mysql_select", line: 0n, column: 0n }] });
|
|
457
|
+
}
|
|
458
|
+
// Convert East parameters to native values
|
|
459
|
+
const nativeParams = params.map(convertParamToNative);
|
|
460
|
+
// Execute the query
|
|
461
|
+
const [rawRows, fields] = await pool.query(sql, nativeParams);
|
|
462
|
+
// Verify this is a SELECT query (SELECT has fields array with entries)
|
|
463
|
+
if (!Array.isArray(rawRows) || fields.length === 0) {
|
|
464
|
+
throw new EastError('mysql_select only supports SELECT queries. Use mysql_query for INSERT/UPDATE/DELETE.', {
|
|
465
|
+
location: [{ filename: "mysql_select", line: 0n, column: 0n }]
|
|
466
|
+
});
|
|
467
|
+
}
|
|
468
|
+
// Get column metadata
|
|
469
|
+
const columnMetaMap = new Map();
|
|
470
|
+
for (const field of fields) {
|
|
471
|
+
columnMetaMap.set(field.name, { fieldType: field.type });
|
|
472
|
+
}
|
|
473
|
+
// Validate field types and determine which are OptionTypes
|
|
474
|
+
// Note: T is EastTypeValue (IR format), not EastType (runtime format)
|
|
475
|
+
const structTypeValue = rowType;
|
|
476
|
+
const fieldInfo = new Map();
|
|
477
|
+
for (const field of structTypeValue.value) {
|
|
478
|
+
const fieldName = field.name;
|
|
479
|
+
const fieldType = field.type;
|
|
480
|
+
const colMeta = columnMetaMap.get(fieldName);
|
|
481
|
+
if (!colMeta) {
|
|
482
|
+
throw new EastError(`Column '${fieldName}' not found in query result`, { location: [{ filename: "mysql_select", line: 0n, column: 0n }] });
|
|
483
|
+
}
|
|
484
|
+
// Determine expected base type from MySQL field type
|
|
485
|
+
let expectedBaseType;
|
|
486
|
+
const ft = colMeta.fieldType;
|
|
487
|
+
if (ft === 1 || ft === 16) { // TINY (as boolean), BIT
|
|
488
|
+
expectedBaseType = BooleanType;
|
|
489
|
+
}
|
|
490
|
+
else if (ft === 2 || ft === 3 || ft === 8 || ft === 9 || ft === 13) { // SHORT, LONG, LONGLONG, INT24, YEAR
|
|
491
|
+
expectedBaseType = IntegerType;
|
|
492
|
+
}
|
|
493
|
+
else if (ft === 0 || ft === 4 || ft === 5 || ft === 246) { // DECIMAL, FLOAT, DOUBLE, NEWDECIMAL
|
|
494
|
+
expectedBaseType = FloatType;
|
|
495
|
+
}
|
|
496
|
+
else if (ft === 253 || ft === 254) { // VARCHAR, STRING (CHAR)
|
|
497
|
+
expectedBaseType = EastStringType;
|
|
498
|
+
}
|
|
499
|
+
else if (ft === 7 || ft === 10 || ft === 11 || ft === 12) { // TIMESTAMP, DATE, TIME, DATETIME
|
|
500
|
+
expectedBaseType = DateTimeType;
|
|
501
|
+
}
|
|
502
|
+
else if (ft === 252) { // BLOB or TEXT (both use 252!)
|
|
503
|
+
// Field type 252 is ambiguous - used for both TEXT and BLOB
|
|
504
|
+
// Check if user expects String (TEXT) or Blob
|
|
505
|
+
const isString = isTypeValueEqual(fieldType, toEastTypeValue(EastStringType));
|
|
506
|
+
const isStringOption = isTypeValueEqual(fieldType, toEastTypeValue(OptionType(EastStringType)));
|
|
507
|
+
const isBlob = isTypeValueEqual(fieldType, toEastTypeValue(BlobType));
|
|
508
|
+
const isBlobOption = isTypeValueEqual(fieldType, toEastTypeValue(OptionType(BlobType)));
|
|
509
|
+
if (isString || isStringOption) {
|
|
510
|
+
expectedBaseType = EastStringType;
|
|
511
|
+
}
|
|
512
|
+
else if (isBlob || isBlobOption) {
|
|
513
|
+
expectedBaseType = BlobType;
|
|
514
|
+
}
|
|
515
|
+
else {
|
|
516
|
+
throw new EastError(`Type mismatch for column '${fieldName}': MySQL field type 252 (TEXT/BLOB), got ${fieldType.type} but expected String, Blob, OptionType(String), or OptionType(Blob)`, { location: [{ filename: "mysql_select", line: 0n, column: 0n }] });
|
|
517
|
+
}
|
|
518
|
+
fieldInfo.set(fieldName, { isOption: isStringOption || isBlobOption, expectedBaseType });
|
|
519
|
+
continue;
|
|
520
|
+
}
|
|
521
|
+
else {
|
|
522
|
+
// Unknown field type - skip type validation, rely on isValueOf later
|
|
523
|
+
fieldInfo.set(fieldName, { isOption: false, expectedBaseType: IntegerType });
|
|
524
|
+
continue;
|
|
525
|
+
}
|
|
526
|
+
// Check if field type matches base type or OptionType(base type)
|
|
527
|
+
const isBase = isTypeValueEqual(fieldType, toEastTypeValue(expectedBaseType));
|
|
528
|
+
const isOption = isTypeValueEqual(fieldType, toEastTypeValue(OptionType(expectedBaseType)));
|
|
529
|
+
if (!isBase && !isOption) {
|
|
530
|
+
throw new EastError(`Type mismatch for column '${fieldName}': MySQL field type ${ft}, got ${fieldType.type} but expected ${expectedBaseType.type} or OptionType(${expectedBaseType.type})`, { location: [{ filename: "mysql_select", line: 0n, column: 0n }] });
|
|
531
|
+
}
|
|
532
|
+
fieldInfo.set(fieldName, { isOption, expectedBaseType });
|
|
533
|
+
}
|
|
534
|
+
// Convert values based on column metadata and handle nulls
|
|
535
|
+
const rows = rawRows.map((row, rowIndex) => {
|
|
536
|
+
const converted = {};
|
|
537
|
+
for (const [key, value] of Object.entries(row)) {
|
|
538
|
+
const info = fieldInfo.get(key);
|
|
539
|
+
const colMeta = columnMetaMap.get(key);
|
|
540
|
+
const ft = colMeta?.fieldType;
|
|
541
|
+
if (value === null) {
|
|
542
|
+
if (info?.isOption) {
|
|
543
|
+
converted[key] = variant('none', null);
|
|
544
|
+
}
|
|
545
|
+
else {
|
|
546
|
+
throw new EastError(`null value at row[${rowIndex}] for required field '${key}' - use OptionType(${info?.expectedBaseType.type ?? 'T'}) for nullable columns`, { location: [{ filename: "mysql_select", line: 0n, column: 0n }] });
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
else {
|
|
550
|
+
// Convert based on field type
|
|
551
|
+
let convertedValue;
|
|
552
|
+
if (ft === 2 || ft === 3 || ft === 8 || ft === 9 || ft === 13) { // SHORT, LONG, LONGLONG, INT24, YEAR
|
|
553
|
+
convertedValue = BigInt(value);
|
|
554
|
+
}
|
|
555
|
+
else if (ft === 252 && Buffer.isBuffer(value)) { // BLOB
|
|
556
|
+
convertedValue = new Uint8Array(value);
|
|
557
|
+
}
|
|
558
|
+
else {
|
|
559
|
+
convertedValue = value;
|
|
560
|
+
}
|
|
561
|
+
converted[key] = info?.isOption ? variant('some', convertedValue) : convertedValue;
|
|
562
|
+
}
|
|
563
|
+
}
|
|
564
|
+
return converted;
|
|
565
|
+
});
|
|
566
|
+
// Type validation is already done field-by-field above during column metadata validation
|
|
567
|
+
return rows;
|
|
568
|
+
}
|
|
569
|
+
catch (err) {
|
|
570
|
+
if (err instanceof EastError)
|
|
571
|
+
throw err;
|
|
572
|
+
throw new EastError(`MySQL select failed: ${err.message}`, {
|
|
573
|
+
location: [{ filename: "mysql_select", line: 0n, column: 0n }],
|
|
373
574
|
cause: err
|
|
374
575
|
});
|
|
375
576
|
}
|
|
@@ -383,7 +584,7 @@ export const MySqlImpl = [
|
|
|
383
584
|
}
|
|
384
585
|
catch (err) {
|
|
385
586
|
throw new EastError(`MySQL close failed: ${err.message}`, {
|
|
386
|
-
location: { filename: "mysql_close", line: 0n, column: 0n },
|
|
587
|
+
location: [{ filename: "mysql_close", line: 0n, column: 0n }],
|
|
387
588
|
cause: err
|
|
388
589
|
});
|
|
389
590
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mysql.js","sourceRoot":"","sources":["../../../src/sql/mysql.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
*
|
|
11
11
|
* @packageDocumentation
|
|
12
12
|
*/
|
|
13
|
-
import { BlobType, BooleanType, DateTimeType, FloatType, IntegerType, NullType, StringType as EastStringType } from "@elaraai/east";
|
|
13
|
+
import { ArrayType, BlobType, BooleanType, DateTimeType, FloatType, IntegerType, NullType, OptionType, StringType as EastStringType } from "@elaraai/east";
|
|
14
14
|
import type { PlatformFunction } from "@elaraai/east/internal";
|
|
15
15
|
import { StringType } from './types.js';
|
|
16
16
|
/**
|
|
@@ -69,13 +69,13 @@ import { StringType } from './types.js';
|
|
|
69
69
|
* - Connections are automatically returned to the pool after queries
|
|
70
70
|
*/
|
|
71
71
|
export declare const postgres_connect: import("@elaraai/east").AsyncPlatformDefinition<[import("@elaraai/east").StructType<{
|
|
72
|
-
host: EastStringType;
|
|
73
|
-
port: IntegerType;
|
|
74
|
-
database: EastStringType;
|
|
75
|
-
user: EastStringType;
|
|
76
|
-
password: EastStringType;
|
|
77
|
-
ssl:
|
|
78
|
-
maxConnections:
|
|
72
|
+
readonly host: EastStringType;
|
|
73
|
+
readonly port: IntegerType;
|
|
74
|
+
readonly database: EastStringType;
|
|
75
|
+
readonly user: EastStringType;
|
|
76
|
+
readonly password: EastStringType;
|
|
77
|
+
readonly ssl: OptionType<BooleanType>;
|
|
78
|
+
readonly maxConnections: OptionType<IntegerType>;
|
|
79
79
|
}>], EastStringType>;
|
|
80
80
|
/**
|
|
81
81
|
* Executes a SQL query with parameterized values.
|
|
@@ -134,37 +134,115 @@ export declare const postgres_connect: import("@elaraai/east").AsyncPlatformDefi
|
|
|
134
134
|
* - All queries are asynchronous
|
|
135
135
|
* - Parameters prevent SQL injection attacks
|
|
136
136
|
*/
|
|
137
|
-
export declare const postgres_query: import("@elaraai/east").AsyncPlatformDefinition<[EastStringType, EastStringType,
|
|
138
|
-
Null: NullType;
|
|
139
|
-
Boolean: BooleanType;
|
|
140
|
-
Integer: IntegerType;
|
|
141
|
-
Float: FloatType;
|
|
142
|
-
String: StringType;
|
|
143
|
-
DateTime: DateTimeType;
|
|
144
|
-
Blob: BlobType;
|
|
137
|
+
export declare const postgres_query: import("@elaraai/east").AsyncPlatformDefinition<[EastStringType, EastStringType, ArrayType<import("@elaraai/east").VariantType<{
|
|
138
|
+
readonly Null: NullType;
|
|
139
|
+
readonly Boolean: BooleanType;
|
|
140
|
+
readonly Integer: IntegerType;
|
|
141
|
+
readonly Float: FloatType;
|
|
142
|
+
readonly String: StringType;
|
|
143
|
+
readonly DateTime: DateTimeType;
|
|
144
|
+
readonly Blob: BlobType;
|
|
145
145
|
}>>], import("@elaraai/east").VariantType<{
|
|
146
|
-
select: import("@elaraai/east").StructType<{
|
|
147
|
-
rows:
|
|
148
|
-
Null: NullType;
|
|
149
|
-
Boolean: BooleanType;
|
|
150
|
-
Integer: IntegerType;
|
|
151
|
-
Float: FloatType;
|
|
152
|
-
String: StringType;
|
|
153
|
-
DateTime: DateTimeType;
|
|
154
|
-
Blob: BlobType;
|
|
146
|
+
readonly select: import("@elaraai/east").StructType<{
|
|
147
|
+
readonly rows: ArrayType<import("@elaraai/east").DictType<EastStringType, import("@elaraai/east").VariantType<{
|
|
148
|
+
readonly Null: NullType;
|
|
149
|
+
readonly Boolean: BooleanType;
|
|
150
|
+
readonly Integer: IntegerType;
|
|
151
|
+
readonly Float: FloatType;
|
|
152
|
+
readonly String: StringType;
|
|
153
|
+
readonly DateTime: DateTimeType;
|
|
154
|
+
readonly Blob: BlobType;
|
|
155
155
|
}>>>;
|
|
156
156
|
}>;
|
|
157
|
-
insert: import("@elaraai/east").StructType<{
|
|
158
|
-
rowsAffected: IntegerType;
|
|
159
|
-
lastInsertId:
|
|
157
|
+
readonly insert: import("@elaraai/east").StructType<{
|
|
158
|
+
readonly rowsAffected: IntegerType;
|
|
159
|
+
readonly lastInsertId: OptionType<IntegerType>;
|
|
160
160
|
}>;
|
|
161
|
-
update: import("@elaraai/east").StructType<{
|
|
162
|
-
rowsAffected: IntegerType;
|
|
161
|
+
readonly update: import("@elaraai/east").StructType<{
|
|
162
|
+
readonly rowsAffected: IntegerType;
|
|
163
163
|
}>;
|
|
164
|
-
delete: import("@elaraai/east").StructType<{
|
|
165
|
-
rowsAffected: IntegerType;
|
|
164
|
+
readonly delete: import("@elaraai/east").StructType<{
|
|
165
|
+
readonly rowsAffected: IntegerType;
|
|
166
166
|
}>;
|
|
167
167
|
}>>;
|
|
168
|
+
/**
|
|
169
|
+
* Executes a SELECT query with user-defined return type.
|
|
170
|
+
*
|
|
171
|
+
* Runs a SELECT query against a PostgreSQL database with parameter binding and
|
|
172
|
+
* returns results as an array of typed rows. The return type is generic,
|
|
173
|
+
* allowing users to specify the expected row structure for type-safe access.
|
|
174
|
+
*
|
|
175
|
+
* This is a generic platform function for the East language, enabling type-safe
|
|
176
|
+
* SELECT queries in East programs running on Node.js.
|
|
177
|
+
*
|
|
178
|
+
* @typeParam T - The expected row type for query results
|
|
179
|
+
* @param handle - Connection handle from postgres_connect()
|
|
180
|
+
* @param sql - SQL SELECT query string with $1, $2, etc. placeholders
|
|
181
|
+
* @param params - Query parameters as SqlParameterType array
|
|
182
|
+
* @returns Array of rows matching the specified type T
|
|
183
|
+
*
|
|
184
|
+
* @throws {EastError} When query fails due to:
|
|
185
|
+
* - Invalid connection handle (location: "postgres_select")
|
|
186
|
+
* - SQL syntax errors (location: "postgres_select")
|
|
187
|
+
* - Query is not a SELECT (location: "postgres_select")
|
|
188
|
+
* - Type coercion failure (location: "postgres_select")
|
|
189
|
+
*
|
|
190
|
+
* @example
|
|
191
|
+
* ```ts
|
|
192
|
+
* import { East, NullType, StructType, StringType, IntegerType, variant } from "@elaraai/east";
|
|
193
|
+
* import { SQL } from "@elaraai/east-node-io";
|
|
194
|
+
*
|
|
195
|
+
* // Define the expected row type
|
|
196
|
+
* const UserRowType = StructType({
|
|
197
|
+
* id: IntegerType,
|
|
198
|
+
* name: StringType,
|
|
199
|
+
* email: StringType,
|
|
200
|
+
* });
|
|
201
|
+
*
|
|
202
|
+
* const queryUsers = East.function([], NullType, ($) => {
|
|
203
|
+
* const config = $.let({
|
|
204
|
+
* host: "localhost",
|
|
205
|
+
* port: 5432n,
|
|
206
|
+
* database: "myapp",
|
|
207
|
+
* user: "postgres",
|
|
208
|
+
* password: "secret",
|
|
209
|
+
* ssl: variant('none', null),
|
|
210
|
+
* maxConnections: variant('none', null),
|
|
211
|
+
* });
|
|
212
|
+
*
|
|
213
|
+
* const conn = $.let(SQL.Postgres.connect(config));
|
|
214
|
+
*
|
|
215
|
+
* // Query with typed results - returns Array<UserRowType>
|
|
216
|
+
* const users = $.let(SQL.Postgres.select([UserRowType], conn,
|
|
217
|
+
* "SELECT id, name, email FROM users WHERE active = $1",
|
|
218
|
+
* [variant('Boolean', true)]
|
|
219
|
+
* ));
|
|
220
|
+
* // users is typed as Array<{ id: bigint, name: string, email: string }>
|
|
221
|
+
*
|
|
222
|
+
* $(SQL.Postgres.close(conn));
|
|
223
|
+
* $.return(null);
|
|
224
|
+
* });
|
|
225
|
+
*
|
|
226
|
+
* const compiled = East.compileAsync(queryUsers.toIR(), SQL.Postgres.Implementation);
|
|
227
|
+
* await compiled();
|
|
228
|
+
* ```
|
|
229
|
+
*
|
|
230
|
+
* @remarks
|
|
231
|
+
* - Only SELECT queries are supported (use postgres_query for INSERT/UPDATE/DELETE)
|
|
232
|
+
* - Uses $1, $2, $3, etc. for parameter placeholders
|
|
233
|
+
* - Row type T should match the structure of selected columns
|
|
234
|
+
* - All PostgreSQL data types are mapped to appropriate East types
|
|
235
|
+
* - NULL values are preserved in the result
|
|
236
|
+
*/
|
|
237
|
+
export declare const postgres_select: import("@elaraai/east").AsyncGenericPlatformDefinition<readonly ["T"], readonly [EastStringType, EastStringType, ArrayType<import("@elaraai/east").VariantType<{
|
|
238
|
+
readonly Null: NullType;
|
|
239
|
+
readonly Boolean: BooleanType;
|
|
240
|
+
readonly Integer: IntegerType;
|
|
241
|
+
readonly Float: FloatType;
|
|
242
|
+
readonly String: StringType;
|
|
243
|
+
readonly DateTime: DateTimeType;
|
|
244
|
+
readonly Blob: BlobType;
|
|
245
|
+
}>>], ArrayType<"T">>;
|
|
168
246
|
/**
|
|
169
247
|
* Closes a PostgreSQL connection pool.
|
|
170
248
|
*
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../../src/sql/postgres.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;GAOG;AAEH,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAQ,SAAS,EAAE,WAAW,EAAsC,QAAQ,EAAE,UAAU,EAAa,UAAU,IAAI,cAAc,EAA4B,MAAM,eAAe,CAAC;AAE1O,OAAO,KAAK,EAAiB,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAI9E,OAAO,EAKH,UAAU,EAEb,MAAM,YAAY,CAAC;AA4BpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;oBAAqF,CAAC;AAEnH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAA6G,CAAC;AAEzI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoEG;AACH,eAAO,MAAM,eAAe;;;;;;;;qBAK3B,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,eAAO,MAAM,cAAc,6EAAyE,CAAC;AAErG;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,eAAO,MAAM,kBAAkB,+DAAyD,CAAC;AAkFzF;;;;;GAKG;AACH,eAAO,MAAM,YAAY,EAAE,gBAAgB,EAiR1C,CAAC"}
|