rawsql-ts 0.10.3-beta → 0.10.5-beta
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/README.md +127 -17
- package/dist/esm/index.js +2 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/index.min.js +11 -11
- package/dist/esm/index.min.js.map +4 -4
- package/dist/esm/transformers/SqlPaginationInjector.js +104 -0
- package/dist/esm/transformers/SqlPaginationInjector.js.map +1 -0
- package/dist/esm/transformers/SqlParamInjector.js +301 -17
- package/dist/esm/transformers/SqlParamInjector.js.map +1 -1
- package/dist/esm/transformers/SqlSortInjector.js +146 -0
- package/dist/esm/transformers/SqlSortInjector.js.map +1 -0
- package/dist/esm/types/index.d.ts +2 -0
- package/dist/esm/types/transformers/SqlPaginationInjector.d.ts +35 -0
- package/dist/esm/types/transformers/SqlParamInjector.d.ts +11 -1
- package/dist/esm/types/transformers/SqlSortInjector.d.ts +36 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +11 -11
- package/dist/index.min.js.map +4 -4
- package/dist/transformers/SqlPaginationInjector.d.ts +35 -0
- package/dist/transformers/SqlPaginationInjector.js +108 -0
- package/dist/transformers/SqlPaginationInjector.js.map +1 -0
- package/dist/transformers/SqlParamInjector.d.ts +11 -1
- package/dist/transformers/SqlParamInjector.js +301 -17
- package/dist/transformers/SqlParamInjector.js.map +1 -1
- package/dist/transformers/SqlSortInjector.d.ts +36 -0
- package/dist/transformers/SqlSortInjector.js +150 -0
- package/dist/transformers/SqlSortInjector.js.map +1 -0
- package/package.json +1 -1
@@ -0,0 +1,36 @@
|
|
1
|
+
import { SimpleSelectQuery } from "../models/SelectQuery";
|
2
|
+
/**
|
3
|
+
* SqlSortInjector injects sort conditions into a SelectQuery model,
|
4
|
+
* creating ORDER BY clauses based on provided sort conditions.
|
5
|
+
*/
|
6
|
+
export declare class SqlSortInjector {
|
7
|
+
private tableColumnResolver?;
|
8
|
+
constructor(tableColumnResolver?: (tableName: string) => string[]);
|
9
|
+
/**
|
10
|
+
* Removes ORDER BY clause from the given query.
|
11
|
+
* @param query The SelectQuery to modify
|
12
|
+
* @returns The modified SimpleSelectQuery with ORDER BY clause removed
|
13
|
+
*/
|
14
|
+
static removeOrderBy(query: SimpleSelectQuery | string): SimpleSelectQuery;
|
15
|
+
/**
|
16
|
+
* Injects sort conditions as ORDER BY clauses into the given query model.
|
17
|
+
* Appends to existing ORDER BY clause if present.
|
18
|
+
* @param query The SelectQuery to modify
|
19
|
+
* @param sortConditions A record of column names and sort conditions
|
20
|
+
* @returns The modified SimpleSelectQuery
|
21
|
+
*/
|
22
|
+
inject(query: SimpleSelectQuery | string, sortConditions: SortConditions): SimpleSelectQuery;
|
23
|
+
/**
|
24
|
+
* Validates sort condition for a column
|
25
|
+
*/
|
26
|
+
private validateSortCondition;
|
27
|
+
}
|
28
|
+
export type SortCondition = {
|
29
|
+
asc?: boolean;
|
30
|
+
desc?: boolean;
|
31
|
+
nullsFirst?: boolean;
|
32
|
+
nullsLast?: boolean;
|
33
|
+
};
|
34
|
+
export type SortConditions = {
|
35
|
+
[columnName: string]: SortCondition;
|
36
|
+
};
|
@@ -0,0 +1,150 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.SqlSortInjector = void 0;
|
4
|
+
const SelectQuery_1 = require("../models/SelectQuery");
|
5
|
+
const SelectableColumnCollector_1 = require("./SelectableColumnCollector");
|
6
|
+
const Clause_1 = require("../models/Clause");
|
7
|
+
const SelectQueryParser_1 = require("../parsers/SelectQueryParser");
|
8
|
+
/**
|
9
|
+
* SqlSortInjector injects sort conditions into a SelectQuery model,
|
10
|
+
* creating ORDER BY clauses based on provided sort conditions.
|
11
|
+
*/
|
12
|
+
class SqlSortInjector {
|
13
|
+
constructor(tableColumnResolver) {
|
14
|
+
this.tableColumnResolver = tableColumnResolver;
|
15
|
+
}
|
16
|
+
/**
|
17
|
+
* Removes ORDER BY clause from the given query.
|
18
|
+
* @param query The SelectQuery to modify
|
19
|
+
* @returns The modified SimpleSelectQuery with ORDER BY clause removed
|
20
|
+
*/
|
21
|
+
static removeOrderBy(query) {
|
22
|
+
// Convert string query to SimpleSelectQuery using SelectQueryParser if needed
|
23
|
+
if (typeof query === 'string') {
|
24
|
+
query = SelectQueryParser_1.SelectQueryParser.parse(query);
|
25
|
+
}
|
26
|
+
// Check if query is SimpleSelectQuery
|
27
|
+
if (!(query instanceof SelectQuery_1.SimpleSelectQuery)) {
|
28
|
+
throw new Error('Complex queries are not supported for ORDER BY removal');
|
29
|
+
}
|
30
|
+
// Create a new query without ORDER BY clause
|
31
|
+
return new SelectQuery_1.SimpleSelectQuery({
|
32
|
+
withClause: query.withClause,
|
33
|
+
selectClause: query.selectClause,
|
34
|
+
fromClause: query.fromClause,
|
35
|
+
whereClause: query.whereClause,
|
36
|
+
groupByClause: query.groupByClause,
|
37
|
+
havingClause: query.havingClause,
|
38
|
+
orderByClause: null, // Remove ORDER BY
|
39
|
+
windowClause: query.windowClause,
|
40
|
+
limitClause: query.limitClause,
|
41
|
+
offsetClause: query.offsetClause,
|
42
|
+
fetchClause: query.fetchClause,
|
43
|
+
forClause: query.forClause,
|
44
|
+
});
|
45
|
+
}
|
46
|
+
/**
|
47
|
+
* Injects sort conditions as ORDER BY clauses into the given query model.
|
48
|
+
* Appends to existing ORDER BY clause if present.
|
49
|
+
* @param query The SelectQuery to modify
|
50
|
+
* @param sortConditions A record of column names and sort conditions
|
51
|
+
* @returns The modified SimpleSelectQuery
|
52
|
+
*/
|
53
|
+
inject(query, sortConditions) {
|
54
|
+
// Convert string query to SimpleSelectQuery using SelectQueryParser if needed
|
55
|
+
if (typeof query === 'string') {
|
56
|
+
query = SelectQueryParser_1.SelectQueryParser.parse(query);
|
57
|
+
}
|
58
|
+
// Check if query is SimpleSelectQuery
|
59
|
+
if (!(query instanceof SelectQuery_1.SimpleSelectQuery)) {
|
60
|
+
throw new Error('Complex queries are not supported for sorting');
|
61
|
+
}
|
62
|
+
// Collect available columns from the current query only (no upstream search)
|
63
|
+
const collector = new SelectableColumnCollector_1.SelectableColumnCollector(this.tableColumnResolver);
|
64
|
+
const availableColumns = collector.collect(query);
|
65
|
+
// Validate that all specified columns exist
|
66
|
+
for (const columnName of Object.keys(sortConditions)) {
|
67
|
+
const columnEntry = availableColumns.find(item => item.name === columnName);
|
68
|
+
if (!columnEntry) {
|
69
|
+
throw new Error(`Column or alias '${columnName}' not found in current query`);
|
70
|
+
}
|
71
|
+
}
|
72
|
+
// Build new ORDER BY items
|
73
|
+
const newOrderByItems = [];
|
74
|
+
for (const [columnName, condition] of Object.entries(sortConditions)) {
|
75
|
+
const columnEntry = availableColumns.find(item => item.name === columnName);
|
76
|
+
if (!columnEntry)
|
77
|
+
continue; // Should not happen due to validation above
|
78
|
+
const columnRef = columnEntry.value;
|
79
|
+
// Validate condition
|
80
|
+
this.validateSortCondition(columnName, condition);
|
81
|
+
// Determine sort direction
|
82
|
+
let sortDirection;
|
83
|
+
if (condition.desc) {
|
84
|
+
sortDirection = Clause_1.SortDirection.Descending;
|
85
|
+
}
|
86
|
+
else {
|
87
|
+
sortDirection = Clause_1.SortDirection.Ascending; // Default to ASC
|
88
|
+
}
|
89
|
+
// Determine nulls position
|
90
|
+
let nullsPosition = null;
|
91
|
+
if (condition.nullsFirst) {
|
92
|
+
nullsPosition = Clause_1.NullsSortDirection.First;
|
93
|
+
}
|
94
|
+
else if (condition.nullsLast) {
|
95
|
+
nullsPosition = Clause_1.NullsSortDirection.Last;
|
96
|
+
}
|
97
|
+
// Create OrderByItem
|
98
|
+
const orderByItem = new Clause_1.OrderByItem(columnRef, sortDirection, nullsPosition);
|
99
|
+
newOrderByItems.push(orderByItem);
|
100
|
+
}
|
101
|
+
// Combine with existing ORDER BY clause if present
|
102
|
+
let finalOrderByItems = [];
|
103
|
+
if (query.orderByClause) {
|
104
|
+
// Append to existing ORDER BY
|
105
|
+
finalOrderByItems = [...query.orderByClause.order, ...newOrderByItems];
|
106
|
+
}
|
107
|
+
else {
|
108
|
+
// Create new ORDER BY
|
109
|
+
finalOrderByItems = newOrderByItems;
|
110
|
+
}
|
111
|
+
// Create new OrderByClause
|
112
|
+
const newOrderByClause = finalOrderByItems.length > 0
|
113
|
+
? new Clause_1.OrderByClause(finalOrderByItems)
|
114
|
+
: null;
|
115
|
+
// Create new query with updated ORDER BY clause
|
116
|
+
return new SelectQuery_1.SimpleSelectQuery({
|
117
|
+
withClause: query.withClause,
|
118
|
+
selectClause: query.selectClause,
|
119
|
+
fromClause: query.fromClause,
|
120
|
+
whereClause: query.whereClause,
|
121
|
+
groupByClause: query.groupByClause,
|
122
|
+
havingClause: query.havingClause,
|
123
|
+
orderByClause: newOrderByClause,
|
124
|
+
windowClause: query.windowClause,
|
125
|
+
limitClause: query.limitClause,
|
126
|
+
offsetClause: query.offsetClause,
|
127
|
+
fetchClause: query.fetchClause,
|
128
|
+
forClause: query.forClause,
|
129
|
+
});
|
130
|
+
}
|
131
|
+
/**
|
132
|
+
* Validates sort condition for a column
|
133
|
+
*/
|
134
|
+
validateSortCondition(columnName, condition) {
|
135
|
+
// Check for conflicting sort directions
|
136
|
+
if (condition.asc && condition.desc) {
|
137
|
+
throw new Error(`Conflicting sort directions for column '${columnName}': both asc and desc specified`);
|
138
|
+
}
|
139
|
+
// Check for conflicting nulls positions
|
140
|
+
if (condition.nullsFirst && condition.nullsLast) {
|
141
|
+
throw new Error(`Conflicting nulls positions for column '${columnName}': both nullsFirst and nullsLast specified`);
|
142
|
+
}
|
143
|
+
// Check if at least one option is specified
|
144
|
+
if (!condition.asc && !condition.desc && !condition.nullsFirst && !condition.nullsLast) {
|
145
|
+
throw new Error(`Empty sort condition for column '${columnName}': at least one sort option must be specified`);
|
146
|
+
}
|
147
|
+
}
|
148
|
+
}
|
149
|
+
exports.SqlSortInjector = SqlSortInjector;
|
150
|
+
//# sourceMappingURL=SqlSortInjector.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"SqlSortInjector.js","sourceRoot":"","sources":["../../src/transformers/SqlSortInjector.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "rawsql-ts",
|
3
|
-
"version": "0.10.
|
3
|
+
"version": "0.10.5-beta",
|
4
4
|
"description": "[beta]High-performance SQL parser and AST analyzer written in TypeScript. Provides fast parsing and advanced transformation capabilities.",
|
5
5
|
"main": "dist/index.js",
|
6
6
|
"module": "dist/esm/index.js",
|