@l-v-yonsama/multi-platform-database-drivers 0.13.29 → 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/built/src/drivers/Auth0Driver.d.ts +3 -3
- package/built/src/drivers/Auth0Driver.js +10 -10
- package/built/src/drivers/Auth0Driver.js.map +1 -1
- package/built/src/drivers/BaseDriver.d.ts +2 -2
- package/built/src/drivers/KeycloakDriver.d.ts +3 -3
- package/built/src/drivers/KeycloakDriver.js +8 -8
- package/built/src/drivers/KeycloakDriver.js.map +1 -1
- package/built/src/drivers/MemcacheDriver.d.ts +3 -3
- package/built/src/drivers/MemcacheDriver.js +10 -9
- package/built/src/drivers/MemcacheDriver.js.map +1 -1
- package/built/src/drivers/MqttDriver.d.ts +5 -3
- package/built/src/drivers/MqttDriver.js +56 -5
- package/built/src/drivers/MqttDriver.js.map +1 -1
- package/built/src/drivers/MySQLDriver.js +5 -1
- package/built/src/drivers/MySQLDriver.js.map +1 -1
- package/built/src/drivers/PostgresDriver.js +3 -0
- package/built/src/drivers/PostgresDriver.js.map +1 -1
- package/built/src/drivers/RedisDriver.d.ts +4 -4
- package/built/src/drivers/RedisDriver.js +4 -4
- package/built/src/drivers/RedisDriver.js.map +1 -1
- package/built/src/drivers/SQLServerDriver.js +11 -2
- package/built/src/drivers/SQLServerDriver.js.map +1 -1
- package/built/src/drivers/SQLiteDriver.js +7 -0
- package/built/src/drivers/SQLiteDriver.js.map +1 -1
- package/built/src/drivers/aws/AwsCloudwatchServiceClient.d.ts +7 -5
- package/built/src/drivers/aws/AwsCloudwatchServiceClient.js +14 -15
- package/built/src/drivers/aws/AwsCloudwatchServiceClient.js.map +1 -1
- package/built/src/drivers/aws/AwsDynamoServiceClient.d.ts +2 -4
- package/built/src/drivers/aws/AwsDynamoServiceClient.js +0 -5
- package/built/src/drivers/aws/AwsDynamoServiceClient.js.map +1 -1
- package/built/src/drivers/aws/AwsS3ServiceClient.d.ts +3 -3
- package/built/src/drivers/aws/AwsS3ServiceClient.js +6 -6
- package/built/src/drivers/aws/AwsS3ServiceClient.js.map +1 -1
- package/built/src/drivers/aws/AwsSQSServiceClient.d.ts +3 -3
- package/built/src/drivers/aws/AwsSQSServiceClient.js +5 -4
- package/built/src/drivers/aws/AwsSQSServiceClient.js.map +1 -1
- package/built/src/helpers/ProposalHelper.d.ts +5 -0
- package/built/src/helpers/ProposalHelper.js +275 -0
- package/built/src/helpers/ProposalHelper.js.map +1 -0
- package/built/src/helpers/SQLHelper.d.ts +4 -9
- package/built/src/helpers/SQLHelper.js +23 -391
- package/built/src/helpers/SQLHelper.js.map +1 -1
- package/built/src/helpers/index.d.ts +2 -0
- package/built/src/helpers/index.js +2 -0
- package/built/src/helpers/index.js.map +1 -1
- package/built/src/helpers/prompts/Auth0PromptHelper.d.ts +2 -0
- package/built/src/helpers/prompts/Auth0PromptHelper.js +45 -0
- package/built/src/helpers/prompts/Auth0PromptHelper.js.map +1 -0
- package/built/src/helpers/prompts/AwsPromptHelper.d.ts +6 -0
- package/built/src/helpers/prompts/AwsPromptHelper.js +200 -0
- package/built/src/helpers/prompts/AwsPromptHelper.js.map +1 -0
- package/built/src/helpers/prompts/KeycloakPromptHelper.d.ts +2 -0
- package/built/src/helpers/prompts/KeycloakPromptHelper.js +38 -0
- package/built/src/helpers/prompts/KeycloakPromptHelper.js.map +1 -0
- package/built/src/helpers/prompts/MemcachePromptHelper.d.ts +2 -0
- package/built/src/helpers/prompts/MemcachePromptHelper.js +31 -0
- package/built/src/helpers/prompts/MemcachePromptHelper.js.map +1 -0
- package/built/src/helpers/prompts/MqttPromptHelper.d.ts +2 -0
- package/built/src/helpers/prompts/MqttPromptHelper.js +31 -0
- package/built/src/helpers/prompts/MqttPromptHelper.js.map +1 -0
- package/built/src/helpers/prompts/RdsPromptHelper.d.ts +7 -0
- package/built/src/helpers/prompts/RdsPromptHelper.js +164 -0
- package/built/src/helpers/prompts/RdsPromptHelper.js.map +1 -0
- package/built/src/helpers/prompts/RedisPromptHelper.d.ts +2 -0
- package/built/src/helpers/prompts/RedisPromptHelper.js +22 -0
- package/built/src/helpers/prompts/RedisPromptHelper.js.map +1 -0
- package/built/src/helpers/prompts/SchemaPromptHelper.d.ts +2 -0
- package/built/src/helpers/prompts/SchemaPromptHelper.js +82 -0
- package/built/src/helpers/prompts/SchemaPromptHelper.js.map +1 -0
- package/built/src/helpers/prompts/index.d.ts +8 -0
- package/built/src/helpers/prompts/index.js +12 -0
- package/built/src/helpers/prompts/index.js.map +1 -0
- package/built/src/helpers/prompts/promptFormatUtils.d.ts +1 -0
- package/built/src/helpers/prompts/promptFormatUtils.js +8 -0
- package/built/src/helpers/prompts/promptFormatUtils.js.map +1 -0
- package/built/src/resource/DbResource.d.ts +3 -1
- package/built/src/resource/DbResource.js +3 -0
- package/built/src/resource/DbResource.js.map +1 -1
- package/built/src/types/drivers/ScanParams.d.ts +66 -8
- package/built/src/types/helpers/index.d.ts +38 -1
- package/built/src/types/helpers/index.js.map +1 -1
- package/built/src/types/resource/AwsDynamoTableAttributes.d.ts +1 -0
- package/built/src/types/resource/ConnectionSetting.d.ts +12 -0
- package/built/src/types/resource/ConnectionSetting.js +9 -0
- package/built/src/types/resource/ConnectionSetting.js.map +1 -1
- package/built/src/types/resource/SQLServerAuthenticationType.d.ts +2 -1
- package/built/src/types/resource/SQLServerAuthenticationType.js +1 -0
- package/built/src/types/resource/SQLServerAuthenticationType.js.map +1 -1
- package/built/src/utils/dbType.d.ts +1 -0
- package/built/src/utils/dbType.js +11 -1
- package/built/src/utils/dbType.js.map +1 -1
- package/package.json +5 -7
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.toRdsDatabase = exports.separateMultipleQueries = exports.needsQuoting = exports.wrapQuote = exports.wrapBackQuote = exports.wrapDoubleQuote = exports.wrapSingleQuote = exports.normalizeSimpleParametersQuery = exports.normalizePositionedParametersQuery = exports.normalizeQuery = exports.isReadOnlyQuery = exports.parseQuery = exports.hasSetVariableClause = exports.toSafeQueryForPgsqlAst = exports.toViewDataNormalizedQuery = exports.toViewDataQuery = exports.createColumnNames = exports.createTableNames = exports.toCountRecordsQuery = exports.toViewRecordsQuery = exports.toDeleteStatement = exports.toUpdateStatement = exports.toInsertStatement = exports.createUndoChangeSQL = exports.formatQuery = exports.getSqlLanguage = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const rdh_1 = require("@l-v-yonsama/rdh");
|
|
6
6
|
const dayjs_1 = tslib_1.__importDefault(require("dayjs"));
|
|
@@ -512,7 +512,7 @@ const toSafeQueryForPgsqlAst = (query) => {
|
|
|
512
512
|
replacedSql = replacedSql.replace(/\s*WAITFOR\s+DELAY\s+'([\d:]+)'/i, 'SELECT pg_sleep(1)');
|
|
513
513
|
replacedSql = replacedSql.replace(/\bWITHIN\s+GROUP\s*\([^)]+?\)/gi, ' ');
|
|
514
514
|
replacedSql = replacedSql.replace(/\.\[(notnull|from|table|to)\]/gi, '.a1');
|
|
515
|
-
replacedSql = replacedSql.replace(/\
|
|
515
|
+
replacedSql = replacedSql.replace(/\bDATETIME2?\b/gi, 'TIMESTAMP');
|
|
516
516
|
replacedSql = replacedSql.replace(/\bAUTOINCREMENT/gi, '');
|
|
517
517
|
replacedSql = replacedSql.replace(/\b(authorization)/i, '$1_1');
|
|
518
518
|
replacedSql = replacedSql.replace(/\[([^\]]+)\]/g, '"$1"');
|
|
@@ -601,6 +601,26 @@ const parseQuery = (sql) => {
|
|
|
601
601
|
return undefined;
|
|
602
602
|
};
|
|
603
603
|
exports.parseQuery = parseQuery;
|
|
604
|
+
const READ_ONLY_STATEMENT_TYPES = new Set([
|
|
605
|
+
'select',
|
|
606
|
+
'show',
|
|
607
|
+
'union',
|
|
608
|
+
'union all',
|
|
609
|
+
'values',
|
|
610
|
+
]);
|
|
611
|
+
const isReadOnlyQuery = (sql) => {
|
|
612
|
+
var _a;
|
|
613
|
+
const qst = (0, exports.parseQuery)(sql);
|
|
614
|
+
const type = (_a = qst === null || qst === void 0 ? void 0 : qst.ast) === null || _a === void 0 ? void 0 : _a.type;
|
|
615
|
+
if (!type) {
|
|
616
|
+
return false;
|
|
617
|
+
}
|
|
618
|
+
if (type === 'pragma') {
|
|
619
|
+
return !/\bpragma\s+[a-zA-Z0-9\-_.()]+\s*=\s*.+/i.test(sql);
|
|
620
|
+
}
|
|
621
|
+
return READ_ONLY_STATEMENT_TYPES.has(type);
|
|
622
|
+
};
|
|
623
|
+
exports.isReadOnlyQuery = isReadOnlyQuery;
|
|
604
624
|
const normalizeQuery = ({ query, toPositionedParameter, toPositionalCharacter, bindParams, }) => {
|
|
605
625
|
if (toPositionedParameter) {
|
|
606
626
|
return (0, exports.normalizePositionedParametersQuery)(query, bindParams, toPositionalCharacter);
|
|
@@ -756,355 +776,11 @@ const normalizeSimpleParametersQuery = (query, bindParams) => {
|
|
|
756
776
|
return { query: newLines.join('\n'), binds };
|
|
757
777
|
};
|
|
758
778
|
exports.normalizeSimpleParametersQuery = normalizeSimpleParametersQuery;
|
|
759
|
-
const createTableDefinisionsForPrompt = (params) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
760
|
-
const { db: idb, sql, rdsDriver } = params;
|
|
761
|
-
const db = idb instanceof DbResource_1.RdsDatabase ? idb : toRdsDatabase(idb);
|
|
762
|
-
try {
|
|
763
|
-
if (db) {
|
|
764
|
-
const qst = (0, exports.parseQuery)(sql);
|
|
765
|
-
if (qst === undefined || qst.names === undefined) {
|
|
766
|
-
return undefined;
|
|
767
|
-
}
|
|
768
|
-
const dbTableWithSchemas = [];
|
|
769
|
-
const qnameList = [qst.names];
|
|
770
|
-
if (qst.additionalNames) {
|
|
771
|
-
qnameList.push(...qst.additionalNames);
|
|
772
|
-
}
|
|
773
|
-
qnameList.forEach(({ schemaName, tableName }) => {
|
|
774
|
-
var _a, _b;
|
|
775
|
-
const schemas = db.children.filter((it) => schemaName ? (0, rdh_1.equalsIgnoreCase)(it.name, schemaName) : true);
|
|
776
|
-
for (const schema of schemas) {
|
|
777
|
-
const tbl = schema.children.find((it) => (0, rdh_1.equalsIgnoreCase)(it.name, tableName));
|
|
778
|
-
if (tbl) {
|
|
779
|
-
dbTableWithSchemas.push({ table: tbl, schemaName: schema.name });
|
|
780
|
-
if ((_a = tbl.foreignKeys) === null || _a === void 0 ? void 0 : _a.referenceTo) {
|
|
781
|
-
Object.values(tbl.foreignKeys.referenceTo).forEach((refTo) => {
|
|
782
|
-
const tblTo = schema.children.find((it) => (0, rdh_1.equalsIgnoreCase)(it.name, refTo.tableName));
|
|
783
|
-
if (tblTo &&
|
|
784
|
-
dbTableWithSchemas.find((it) => it.table.name === tblTo.name) === undefined) {
|
|
785
|
-
dbTableWithSchemas.push({
|
|
786
|
-
table: tblTo,
|
|
787
|
-
schemaName: schema.name,
|
|
788
|
-
});
|
|
789
|
-
}
|
|
790
|
-
});
|
|
791
|
-
}
|
|
792
|
-
if ((_b = tbl.foreignKeys) === null || _b === void 0 ? void 0 : _b.referencedFrom) {
|
|
793
|
-
Object.values(tbl.foreignKeys.referencedFrom).forEach((refFrom) => {
|
|
794
|
-
const tblFrom = schema.children.find((it) => (0, rdh_1.equalsIgnoreCase)(it.name, refFrom.tableName));
|
|
795
|
-
if (tblFrom &&
|
|
796
|
-
dbTableWithSchemas.find((it) => it.table.name === tblFrom.name) === undefined) {
|
|
797
|
-
dbTableWithSchemas.push({
|
|
798
|
-
table: tblFrom,
|
|
799
|
-
schemaName: schema.name,
|
|
800
|
-
});
|
|
801
|
-
}
|
|
802
|
-
});
|
|
803
|
-
}
|
|
804
|
-
break;
|
|
805
|
-
}
|
|
806
|
-
}
|
|
807
|
-
});
|
|
808
|
-
if (dbTableWithSchemas.length === 0) {
|
|
809
|
-
return undefined;
|
|
810
|
-
}
|
|
811
|
-
const lines = [];
|
|
812
|
-
for (const dbTable of dbTableWithSchemas) {
|
|
813
|
-
let tableDDL = '';
|
|
814
|
-
if (rdsDriver && rdsDriver.supportsShowCreate()) {
|
|
815
|
-
tableDDL = yield rdsDriver.getTableDDL({
|
|
816
|
-
schemaName: dbTable.schemaName,
|
|
817
|
-
tableName: dbTable.table.name,
|
|
818
|
-
});
|
|
819
|
-
}
|
|
820
|
-
if (tableDDL) {
|
|
821
|
-
lines.push(tableDDL);
|
|
822
|
-
}
|
|
823
|
-
else {
|
|
824
|
-
const tableDef = (0, exports.toCreateTableDDL)({ dbTable: dbTable.table });
|
|
825
|
-
lines.push(tableDef);
|
|
826
|
-
}
|
|
827
|
-
lines.push('');
|
|
828
|
-
}
|
|
829
|
-
return lines.join('\n');
|
|
830
|
-
}
|
|
831
|
-
}
|
|
832
|
-
catch (_) {
|
|
833
|
-
console.error(_);
|
|
834
|
-
}
|
|
835
|
-
return undefined;
|
|
836
|
-
});
|
|
837
|
-
exports.createTableDefinisionsForPrompt = createTableDefinisionsForPrompt;
|
|
838
|
-
const getProposals = (params) => {
|
|
839
|
-
const { db: idb, sql, lastChar, keyword, parentWord } = params;
|
|
840
|
-
const upperKeyword = keyword.toUpperCase();
|
|
841
|
-
const upperParentWord = parentWord === null || parentWord === void 0 ? void 0 : parentWord.toUpperCase();
|
|
842
|
-
let ast;
|
|
843
|
-
const retList = [];
|
|
844
|
-
const db = idb instanceof DbResource_1.RdsDatabase ? idb : toRdsDatabase(idb);
|
|
845
|
-
try {
|
|
846
|
-
if (db) {
|
|
847
|
-
try {
|
|
848
|
-
[ast] = (0, pgsql_ast_parser_1.parse)(sql, { locationTracking: true });
|
|
849
|
-
}
|
|
850
|
-
catch (_) {
|
|
851
|
-
}
|
|
852
|
-
if (parentWord) {
|
|
853
|
-
let list = getProposalsByKeywordWithParent(db, ast, upperKeyword, upperParentWord, lastChar);
|
|
854
|
-
if (list.length === 0) {
|
|
855
|
-
list = getProposalsByKeyword(db, upperKeyword, lastChar);
|
|
856
|
-
}
|
|
857
|
-
retList.push(...list);
|
|
858
|
-
}
|
|
859
|
-
else {
|
|
860
|
-
if (keyword) {
|
|
861
|
-
const list = getProposalsByKeyword(db, upperKeyword, lastChar);
|
|
862
|
-
retList.push(...list);
|
|
863
|
-
}
|
|
864
|
-
else {
|
|
865
|
-
retList.push(...getAllProposals(db));
|
|
866
|
-
}
|
|
867
|
-
}
|
|
868
|
-
}
|
|
869
|
-
if (lastChar !== '.' && !parentWord) {
|
|
870
|
-
constant_1.RESERVED_WORDS.filter((s) => s.startsWith(upperKeyword)).forEach((s) => {
|
|
871
|
-
retList.push({
|
|
872
|
-
label: s,
|
|
873
|
-
kind: types_1.ProposalKind.ReservedWord,
|
|
874
|
-
});
|
|
875
|
-
});
|
|
876
|
-
}
|
|
877
|
-
}
|
|
878
|
-
catch (_) {
|
|
879
|
-
}
|
|
880
|
-
const uniqueRetList = Array.from(retList
|
|
881
|
-
.reduce((map, p) => {
|
|
882
|
-
const key = `${p.kind}:${p.label}`;
|
|
883
|
-
const existing = map.get(key);
|
|
884
|
-
if (!existing || (!existing.detail && p.detail)) {
|
|
885
|
-
map.set(key, p);
|
|
886
|
-
}
|
|
887
|
-
return map;
|
|
888
|
-
}, new Map())
|
|
889
|
-
.values());
|
|
890
|
-
return uniqueRetList;
|
|
891
|
-
};
|
|
892
|
-
exports.getProposals = getProposals;
|
|
893
|
-
const getResourcePositions = (params) => {
|
|
894
|
-
const { db: idb, sql } = params;
|
|
895
|
-
const sqlLowerCase = sql.toLocaleLowerCase();
|
|
896
|
-
const retList = [];
|
|
897
|
-
if (idb === undefined) {
|
|
898
|
-
return retList;
|
|
899
|
-
}
|
|
900
|
-
const schema = idb instanceof DbResource_1.RdsDatabase
|
|
901
|
-
? idb.getSchema({ isDefault: true })
|
|
902
|
-
: toRdsDatabase(idb).getSchema({ isDefault: true });
|
|
903
|
-
const tableNames = schema.children
|
|
904
|
-
.map((it) => it.name.toLocaleLowerCase())
|
|
905
|
-
.join('|');
|
|
906
|
-
const reg = new RegExp('\\b(' + tableNames + ')\\b', 'g');
|
|
907
|
-
let m;
|
|
908
|
-
const tableResList = [];
|
|
909
|
-
const columnNameSet = new Set();
|
|
910
|
-
while ((m = reg.exec(sqlLowerCase)) !== null) {
|
|
911
|
-
const name = m[0];
|
|
912
|
-
let comment = undefined;
|
|
913
|
-
const tableRes = schema.children.find((it) => it.name.toLocaleLowerCase() === name);
|
|
914
|
-
if (tableRes) {
|
|
915
|
-
tableResList.push(tableRes);
|
|
916
|
-
comment = tableRes.comment;
|
|
917
|
-
tableRes.children.forEach((it) => {
|
|
918
|
-
columnNameSet.add(it.name.toLowerCase());
|
|
919
|
-
});
|
|
920
|
-
}
|
|
921
|
-
retList.push({
|
|
922
|
-
kind: types_1.ProposalKind.Table,
|
|
923
|
-
name: tableRes.name,
|
|
924
|
-
comment,
|
|
925
|
-
offset: m.index,
|
|
926
|
-
length: name.length,
|
|
927
|
-
});
|
|
928
|
-
}
|
|
929
|
-
if (columnNameSet.size > 0) {
|
|
930
|
-
const reg2 = new RegExp('\\b(' + Array.from(columnNameSet).join('|') + ')\\b', 'g');
|
|
931
|
-
let m2;
|
|
932
|
-
while ((m2 = reg2.exec(sqlLowerCase)) !== null) {
|
|
933
|
-
const name = m2[0];
|
|
934
|
-
const columnRes = tableResList
|
|
935
|
-
.flatMap((table) => table.children)
|
|
936
|
-
.find((column) => column.name.toLocaleLowerCase() === name);
|
|
937
|
-
if (!columnRes) {
|
|
938
|
-
continue;
|
|
939
|
-
}
|
|
940
|
-
retList.push({
|
|
941
|
-
kind: types_1.ProposalKind.Column,
|
|
942
|
-
name: columnRes.name,
|
|
943
|
-
comment: columnRes.comment,
|
|
944
|
-
offset: m2.index,
|
|
945
|
-
length: name.length,
|
|
946
|
-
});
|
|
947
|
-
}
|
|
948
|
-
}
|
|
949
|
-
return retList;
|
|
950
|
-
};
|
|
951
|
-
exports.getResourcePositions = getResourcePositions;
|
|
952
|
-
const resolveAlias = (ast, alias) => {
|
|
953
|
-
if (!ast || !alias) {
|
|
954
|
-
return undefined;
|
|
955
|
-
}
|
|
956
|
-
if (ast.type === 'select') {
|
|
957
|
-
for (const tbl of ast.from) {
|
|
958
|
-
if (tbl.type === 'table') {
|
|
959
|
-
if (tbl.name.alias.toUpperCase() === alias) {
|
|
960
|
-
return tbl.name.name;
|
|
961
|
-
}
|
|
962
|
-
}
|
|
963
|
-
}
|
|
964
|
-
}
|
|
965
|
-
return undefined;
|
|
966
|
-
};
|
|
967
|
-
const matchKeyword = (list, keyword) => {
|
|
968
|
-
return list.some((it) => it.toUpperCase().startsWith(keyword));
|
|
969
|
-
};
|
|
970
|
-
function resolveLastOrderByColumn(table) {
|
|
971
|
-
const columns = table.children;
|
|
972
|
-
if (!(columns === null || columns === void 0 ? void 0 : columns.length)) {
|
|
973
|
-
return undefined;
|
|
974
|
-
}
|
|
975
|
-
const dateColumn = columns.find((col) => {
|
|
976
|
-
const name = col.name.toLowerCase();
|
|
977
|
-
const looksLikeCreated = /created(_at)?$/.test(name) ||
|
|
978
|
-
/create(d)?date$/.test(name) ||
|
|
979
|
-
/insert(ed)?(_at)?$/.test(name);
|
|
980
|
-
return (0, rdh_1.isDateTimeOrDate)(col.colType) && looksLikeCreated;
|
|
981
|
-
});
|
|
982
|
-
if (dateColumn) {
|
|
983
|
-
return dateColumn.name;
|
|
984
|
-
}
|
|
985
|
-
const pks = table.getPrimaryColumnNames();
|
|
986
|
-
if (pks.length === 1) {
|
|
987
|
-
const pkCol = columns.find((c) => c.name === pks[0]);
|
|
988
|
-
if (pkCol && (0, rdh_1.isNumericLike)(pkCol.colType)) {
|
|
989
|
-
return pkCol.name;
|
|
990
|
-
}
|
|
991
|
-
}
|
|
992
|
-
return undefined;
|
|
993
|
-
}
|
|
994
|
-
exports.resolveLastOrderByColumn = resolveLastOrderByColumn;
|
|
995
|
-
const getProposalsByKeywordWithParent = (db, ast, keyword, parentWord, lastChar) => {
|
|
996
|
-
var _a;
|
|
997
|
-
const retList = [];
|
|
998
|
-
const schema = db.children.find((it) => it.name.toUpperCase() === parentWord);
|
|
999
|
-
if (schema) {
|
|
1000
|
-
schema.children.forEach((table) => {
|
|
1001
|
-
var _a;
|
|
1002
|
-
const table_comment = (_a = table.comment) !== null && _a !== void 0 ? _a : '';
|
|
1003
|
-
if (keyword === '' ||
|
|
1004
|
-
matchKeyword([table.name, table_comment], keyword)) {
|
|
1005
|
-
retList.push(createTableProposal(schema, table));
|
|
1006
|
-
}
|
|
1007
|
-
});
|
|
1008
|
-
}
|
|
1009
|
-
const defaultSchema = db.getSchema({ isDefault: true });
|
|
1010
|
-
let table = defaultSchema.children.find((it) => it.name.toUpperCase() === parentWord);
|
|
1011
|
-
if (!table) {
|
|
1012
|
-
const resolvedName = resolveAlias(ast, parentWord);
|
|
1013
|
-
if (resolvedName) {
|
|
1014
|
-
table = defaultSchema.children.find((it) => it.name.toUpperCase() === resolvedName.toUpperCase());
|
|
1015
|
-
}
|
|
1016
|
-
}
|
|
1017
|
-
if (table) {
|
|
1018
|
-
const table_comment = (_a = table.comment) !== null && _a !== void 0 ? _a : '';
|
|
1019
|
-
if (matchKeyword([table.name, table_comment], keyword)) {
|
|
1020
|
-
retList.push(createTableProposal(schema, table));
|
|
1021
|
-
}
|
|
1022
|
-
table.children.forEach((column) => {
|
|
1023
|
-
var _a;
|
|
1024
|
-
const columnComment = (_a = column.comment) !== null && _a !== void 0 ? _a : '';
|
|
1025
|
-
if (keyword === '' ||
|
|
1026
|
-
matchKeyword([column.name, columnComment], keyword)) {
|
|
1027
|
-
retList.push(createColumnProposal(table, column));
|
|
1028
|
-
}
|
|
1029
|
-
});
|
|
1030
|
-
}
|
|
1031
|
-
return retList;
|
|
1032
|
-
};
|
|
1033
|
-
const getProposalsByKeyword = (db, keyword, lastChar) => {
|
|
1034
|
-
const retList = [];
|
|
1035
|
-
const schema = db.getSchema({ isDefault: true });
|
|
1036
|
-
if (lastChar === ' ') {
|
|
1037
|
-
if (['INTO', 'UPDATE', 'FROM'].includes(keyword)) {
|
|
1038
|
-
schema.children.forEach((table) => {
|
|
1039
|
-
retList.push(createTableProposal(schema, table));
|
|
1040
|
-
});
|
|
1041
|
-
return retList;
|
|
1042
|
-
}
|
|
1043
|
-
if ('DELETE' === keyword) {
|
|
1044
|
-
retList.push(createReservedWordProposal('FROM'));
|
|
1045
|
-
}
|
|
1046
|
-
}
|
|
1047
|
-
schema.children.forEach((table) => {
|
|
1048
|
-
var _a;
|
|
1049
|
-
const table_comment = (_a = table.comment) !== null && _a !== void 0 ? _a : '';
|
|
1050
|
-
if (matchKeyword([table.name, table_comment], keyword)) {
|
|
1051
|
-
retList.push(createTableProposal(schema, table));
|
|
1052
|
-
}
|
|
1053
|
-
table.children.forEach((column) => {
|
|
1054
|
-
var _a;
|
|
1055
|
-
const columnComment = (_a = column.comment) !== null && _a !== void 0 ? _a : '';
|
|
1056
|
-
if (matchKeyword([column.name, columnComment], keyword)) {
|
|
1057
|
-
retList.push(createColumnProposal(table, column));
|
|
1058
|
-
}
|
|
1059
|
-
});
|
|
1060
|
-
});
|
|
1061
|
-
return retList;
|
|
1062
|
-
};
|
|
1063
|
-
const getAllProposals = (db) => {
|
|
1064
|
-
const retList = [];
|
|
1065
|
-
const schema = db.getSchema({ isDefault: true });
|
|
1066
|
-
schema.children.forEach((table) => {
|
|
1067
|
-
retList.push(createTableProposal(schema, table));
|
|
1068
|
-
});
|
|
1069
|
-
schema.getUniqColumnNameWithComments().forEach((it) => {
|
|
1070
|
-
var _a;
|
|
1071
|
-
retList.push({
|
|
1072
|
-
label: it.name,
|
|
1073
|
-
kind: types_1.ProposalKind.Column,
|
|
1074
|
-
detail: (_a = it.comment) !== null && _a !== void 0 ? _a : '',
|
|
1075
|
-
});
|
|
1076
|
-
});
|
|
1077
|
-
return retList;
|
|
1078
|
-
};
|
|
1079
|
-
const createTableProposal = (schema, table) => {
|
|
1080
|
-
var _a;
|
|
1081
|
-
const detail = (_a = table.comment) !== null && _a !== void 0 ? _a : '';
|
|
1082
|
-
return {
|
|
1083
|
-
label: table.name,
|
|
1084
|
-
kind: types_1.ProposalKind.Table,
|
|
1085
|
-
detail,
|
|
1086
|
-
};
|
|
1087
|
-
};
|
|
1088
|
-
const createColumnProposal = (table, column) => {
|
|
1089
|
-
var _a;
|
|
1090
|
-
const detail = (_a = column.comment) !== null && _a !== void 0 ? _a : '';
|
|
1091
|
-
return {
|
|
1092
|
-
label: column.name,
|
|
1093
|
-
kind: types_1.ProposalKind.Column,
|
|
1094
|
-
detail,
|
|
1095
|
-
};
|
|
1096
|
-
};
|
|
1097
779
|
const stripComment = (query) => {
|
|
1098
780
|
return query
|
|
1099
781
|
.replace(/\/\*[^*]*\*\//gm, '')
|
|
1100
782
|
.replace(/(\s)?(#|--)\s+.*$/gm, '$1');
|
|
1101
783
|
};
|
|
1102
|
-
const createReservedWordProposal = (word) => {
|
|
1103
|
-
return {
|
|
1104
|
-
label: word,
|
|
1105
|
-
kind: types_1.ProposalKind.ReservedWord,
|
|
1106
|
-
};
|
|
1107
|
-
};
|
|
1108
784
|
const wrapSingleQuote = (input) => (0, exports.wrapQuote)(input, "'");
|
|
1109
785
|
exports.wrapSingleQuote = wrapSingleQuote;
|
|
1110
786
|
const wrapDoubleQuote = (input) => (0, exports.wrapQuote)(input, '"');
|
|
@@ -1315,51 +991,6 @@ const createQNamesUsingLocation = ({ tableName, schemaName, location, sql, }) =>
|
|
|
1315
991
|
schemaName,
|
|
1316
992
|
};
|
|
1317
993
|
};
|
|
1318
|
-
const toCreateTableDDL = ({ dbTable }) => {
|
|
1319
|
-
var _a;
|
|
1320
|
-
const columns = dbTable.children;
|
|
1321
|
-
const colDefs = [];
|
|
1322
|
-
columns.forEach((col) => {
|
|
1323
|
-
let line = ` ${col.name} ${col.colType}`;
|
|
1324
|
-
if (col.primaryKey) {
|
|
1325
|
-
line += ' PRIMARY KEY';
|
|
1326
|
-
}
|
|
1327
|
-
else {
|
|
1328
|
-
if (col.nullable === false) {
|
|
1329
|
-
line += ' NOT NULL';
|
|
1330
|
-
}
|
|
1331
|
-
}
|
|
1332
|
-
if (col.uniqKey) {
|
|
1333
|
-
line += ' UNIQUE';
|
|
1334
|
-
}
|
|
1335
|
-
if (col.extra) {
|
|
1336
|
-
if (col.extra.toLocaleLowerCase() === 'auto_increment') {
|
|
1337
|
-
line += ' AUTO_INCREMENT';
|
|
1338
|
-
}
|
|
1339
|
-
}
|
|
1340
|
-
if (col.default) {
|
|
1341
|
-
line += ` DEFAULT ${col.default}`;
|
|
1342
|
-
}
|
|
1343
|
-
if (col.comment) {
|
|
1344
|
-
line += ` COMMENT '${col.comment}'`;
|
|
1345
|
-
}
|
|
1346
|
-
colDefs.push(line);
|
|
1347
|
-
});
|
|
1348
|
-
if ((_a = dbTable.foreignKeys) === null || _a === void 0 ? void 0 : _a.referenceTo) {
|
|
1349
|
-
Object.entries(dbTable.foreignKeys.referenceTo).forEach(([colName, refTo]) => {
|
|
1350
|
-
colDefs.push(` FOREIGN KEY ${refTo.constraintName}(${colName}) REFERENCES ${refTo.tableName}(${refTo.columnName})`);
|
|
1351
|
-
});
|
|
1352
|
-
}
|
|
1353
|
-
let tableDef = `CREATE TABLE ${dbTable.name} (\n${colDefs.join(',\n')}\n)`;
|
|
1354
|
-
if (dbTable.comment) {
|
|
1355
|
-
tableDef += ` COMMENT '${dbTable.comment}';`;
|
|
1356
|
-
}
|
|
1357
|
-
else {
|
|
1358
|
-
tableDef += `;`;
|
|
1359
|
-
}
|
|
1360
|
-
return tableDef;
|
|
1361
|
-
};
|
|
1362
|
-
exports.toCreateTableDDL = toCreateTableDDL;
|
|
1363
994
|
const toGeneralQuery = ({ selectClause, tableRes, schemaName, conditions, quote, idQuoteCharacter, sqlLang, limit, limitAsTop, }) => {
|
|
1364
995
|
const tableNameWithSchema = createTableNameWithSchema({
|
|
1365
996
|
schema: schemaName,
|
|
@@ -1443,4 +1074,5 @@ const toRdsDatabase = (awsDb) => {
|
|
|
1443
1074
|
});
|
|
1444
1075
|
return db;
|
|
1445
1076
|
};
|
|
1077
|
+
exports.toRdsDatabase = toRdsDatabase;
|
|
1446
1078
|
//# sourceMappingURL=SQLHelper.js.map
|