Skip to content

Commit 1b1bd00

Browse files
authored
Merge pull request #15 from funktechno/f/lastlink
more methods
2 parents 7feeb45 + e5cf633 commit 1b1bd00

3 files changed

Lines changed: 134 additions & 42 deletions

File tree

src/index.ts

Lines changed: 96 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -418,13 +418,17 @@ export class SqlSimpleParser {
418418
this.primaryKeyList.forEach((pk) => {
419419
// find table index
420420
var pkTableIndex = this.tableList.findIndex(
421-
(t) => t.Name.toLocaleLowerCase() == pk.PrimaryKeyTableName.toLocaleLowerCase()
421+
(t) =>
422+
t.Name.toLocaleLowerCase() ==
423+
pk.PrimaryKeyTableName.toLocaleLowerCase()
422424
);
423425

424426
// find property index
425427
if (pkTableIndex > -1) {
426428
var propertyIndex = this.tableList[pkTableIndex].Properties.findIndex(
427-
(p) => p.Name.toLocaleLowerCase() == pk.PrimaryKeyName.toLocaleLowerCase()
429+
(p) =>
430+
p.Name.toLocaleLowerCase() ==
431+
pk.PrimaryKeyName.toLocaleLowerCase()
428432
);
429433
if (propertyIndex > -1) {
430434
this.tableList[pkTableIndex].Properties[
@@ -438,7 +442,9 @@ export class SqlSimpleParser {
438442
this.foreignKeyList.forEach((fk) => {
439443
// find table index
440444
var pkTableIndex = this.tableList.findIndex(
441-
(t) => t.Name.toLocaleLowerCase() == fk.ReferencesTableName.toLocaleLowerCase()
445+
(t) =>
446+
t.Name.toLocaleLowerCase() ==
447+
fk.ReferencesTableName.toLocaleLowerCase()
442448
);
443449

444450
// var fkTableIndex = this.tableList.findIndex(
@@ -448,7 +454,9 @@ export class SqlSimpleParser {
448454
// find property index
449455
if (pkTableIndex > -1) {
450456
var propertyIndex = this.tableList[pkTableIndex].Properties.findIndex(
451-
(p) => p.Name.toLocaleLowerCase() == fk.PrimaryKeyName.toLocaleLowerCase()
457+
(p) =>
458+
p.Name.toLocaleLowerCase() ==
459+
fk.PrimaryKeyName.toLocaleLowerCase()
452460
);
453461
if (propertyIndex > -1) {
454462
this.tableList[pkTableIndex].Properties[
@@ -766,6 +774,90 @@ export class SqlSimpleParser {
766774
private static isQuoteChar(char: string): boolean {
767775
return char === '"' || char === "'" || char === "`";
768776
}
777+
/**
778+
* convert labels with start and end strings per database type
779+
* @param label
780+
* @returns
781+
*/
782+
dbTypeEnds(label: string) {
783+
let char1 = '"';
784+
let char2 = '"';
785+
if (this.dialect == "mysql") {
786+
char1 = "`";
787+
char2 = "`";
788+
} else if (this.dialect == "sqlserver") {
789+
char1 = "[";
790+
char2 = "]";
791+
}
792+
return `${char1}${label}${char2}`;
793+
}
794+
WithEnds(): SqlSimpleParser {
795+
this.tableList = this.tableList.map((table) => {
796+
table.Name = this.dbTypeEnds(table.Name);
797+
table.Properties = table.Properties.map((property) => {
798+
property.Name = this.dbTypeEnds(property.Name);
799+
property.TableName = this.dbTypeEnds(property.TableName);
800+
return property;
801+
});
802+
803+
return table;
804+
});
805+
this.primaryKeyList = this.primaryKeyList.map((primaryKey) => {
806+
primaryKey.PrimaryKeyName = this.dbTypeEnds(primaryKey.PrimaryKeyName);
807+
primaryKey.PrimaryKeyTableName = this.dbTypeEnds(
808+
primaryKey.PrimaryKeyTableName
809+
);
810+
return primaryKey;
811+
});
812+
this.foreignKeyList = this.foreignKeyList.map((foreignKey) => {
813+
foreignKey.PrimaryKeyName = this.dbTypeEnds(foreignKey.PrimaryKeyName);
814+
foreignKey.ReferencesPropertyName = this.dbTypeEnds(
815+
foreignKey.ReferencesPropertyName
816+
);
817+
foreignKey.PrimaryKeyTableName = this.dbTypeEnds(
818+
foreignKey.PrimaryKeyTableName
819+
);
820+
foreignKey.ReferencesTableName = this.dbTypeEnds(
821+
foreignKey.ReferencesTableName
822+
);
823+
return foreignKey;
824+
});
825+
return this;
826+
}
827+
828+
WithoutEnds(): SqlSimpleParser {
829+
this.tableList.map((table) => {
830+
table.Name = this.RemoveNameQuantifiers(table.Name);
831+
table.Properties = table.Properties.map((property) => {
832+
property.Name = this.RemoveNameQuantifiers(property.Name);
833+
property.TableName = this.RemoveNameQuantifiers(property.TableName);
834+
return property;
835+
});
836+
837+
return table;
838+
});
839+
this.primaryKeyList = this.primaryKeyList.map((primaryKey) => {
840+
primaryKey.PrimaryKeyName = this.RemoveNameQuantifiers(primaryKey.PrimaryKeyName);
841+
primaryKey.PrimaryKeyTableName = this.RemoveNameQuantifiers(
842+
primaryKey.PrimaryKeyTableName
843+
);
844+
return primaryKey;
845+
});
846+
this.foreignKeyList = this.foreignKeyList.map((foreignKey) => {
847+
foreignKey.PrimaryKeyName = this.RemoveNameQuantifiers(foreignKey.PrimaryKeyName);
848+
foreignKey.ReferencesPropertyName = this.RemoveNameQuantifiers(
849+
foreignKey.ReferencesPropertyName
850+
);
851+
foreignKey.PrimaryKeyTableName = this.RemoveNameQuantifiers(
852+
foreignKey.PrimaryKeyTableName
853+
);
854+
foreignKey.ReferencesTableName = this.RemoveNameQuantifiers(
855+
foreignKey.ReferencesTableName
856+
);
857+
return foreignKey;
858+
});
859+
return this;
860+
}
769861
/**
770862
* return text quantifiers for dialect
771863
* @returns json

tests/SqlSimpleParser/examples_models.spec.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ describe("Example Sql Parsing", () => {
151151
const parser = new SqlSimpleParser("sqlserver");
152152

153153
// get models
154-
const result = parser.feed(sql).ToModel();
154+
const result = parser.feed(sql).WithEnds().ToModel();
155155

156156
// write to json file
157157
const dataKey = expect.getState().currentTestName || "unknown";
@@ -188,7 +188,7 @@ describe("Example Sql Parsing", () => {
188188
const parser = new SqlSimpleParser("postgres");
189189

190190
// get models
191-
const result = parser.feed(sql).ToModel();
191+
const result = parser.feed(sql).WithEnds().WithoutEnds().ToModel();
192192

193193
// write to json file
194194
const dataKey = expect.getState().currentTestName || "unknown";

tests/data/results/ToModel.json

Lines changed: 36 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -20522,79 +20522,79 @@
2052220522
"Example Sql Parsing Run Parser mssql simple": {
2052320523
"TableList": [
2052420524
{
20525-
"Name": "Persons",
20525+
"Name": "[Persons]",
2052620526
"Properties": [
2052720527
{
20528-
"Name": "PersonID",
20528+
"Name": "[PersonID]",
2052920529
"ColumnProperties": "int NOT NULL",
20530-
"TableName": "Persons",
20530+
"TableName": "[Persons]",
2053120531
"ForeignKey": [
2053220532
{
20533-
"PrimaryKeyTableName": "Orders",
20534-
"PrimaryKeyName": "PersonID",
20535-
"ReferencesPropertyName": "PersonID",
20536-
"ReferencesTableName": "Persons",
20533+
"PrimaryKeyTableName": "[Orders]",
20534+
"PrimaryKeyName": "[PersonID]",
20535+
"ReferencesPropertyName": "[PersonID]",
20536+
"ReferencesTableName": "[Persons]",
2053720537
"IsDestination": true
2053820538
}
2053920539
],
2054020540
"IsForeignKey": false,
2054120541
"IsPrimaryKey": true
2054220542
},
2054320543
{
20544-
"Name": "LastName",
20544+
"Name": "[LastName]",
2054520545
"ColumnProperties": "varchar(255)",
20546-
"TableName": "Persons",
20546+
"TableName": "[Persons]",
2054720547
"ForeignKey": [],
2054820548
"IsForeignKey": false,
2054920549
"IsPrimaryKey": false
2055020550
},
2055120551
{
20552-
"Name": "FirstName",
20552+
"Name": "[FirstName]",
2055320553
"ColumnProperties": "varchar(255)",
20554-
"TableName": "Persons",
20554+
"TableName": "[Persons]",
2055520555
"ForeignKey": [],
2055620556
"IsForeignKey": false,
2055720557
"IsPrimaryKey": false
2055820558
},
2055920559
{
20560-
"Name": "Address",
20560+
"Name": "[Address]",
2056120561
"ColumnProperties": "varchar(255)",
20562-
"TableName": "Persons",
20562+
"TableName": "[Persons]",
2056320563
"ForeignKey": [],
2056420564
"IsForeignKey": false,
2056520565
"IsPrimaryKey": false
2056620566
},
2056720567
{
20568-
"Name": "City",
20568+
"Name": "[City]",
2056920569
"ColumnProperties": "varchar(255)",
20570-
"TableName": "Persons",
20570+
"TableName": "[Persons]",
2057120571
"ForeignKey": [],
2057220572
"IsForeignKey": false,
2057320573
"IsPrimaryKey": false
2057420574
}
2057520575
]
2057620576
},
2057720577
{
20578-
"Name": "Orders",
20578+
"Name": "[Orders]",
2057920579
"Properties": [
2058020580
{
20581-
"Name": "OrderID",
20581+
"Name": "[OrderID]",
2058220582
"ColumnProperties": "int NOT NULL PRIMARY KEY",
20583-
"TableName": "Orders",
20583+
"TableName": "[Orders]",
2058420584
"ForeignKey": [],
2058520585
"IsForeignKey": false,
2058620586
"IsPrimaryKey": true
2058720587
},
2058820588
{
20589-
"Name": "PersonID",
20589+
"Name": "[PersonID]",
2059020590
"ColumnProperties": "int NOT NULL",
20591-
"TableName": "Orders",
20591+
"TableName": "[Orders]",
2059220592
"ForeignKey": [
2059320593
{
20594-
"PrimaryKeyTableName": "Persons",
20595-
"PrimaryKeyName": "PersonID",
20596-
"ReferencesPropertyName": "PersonID",
20597-
"ReferencesTableName": "Orders",
20594+
"PrimaryKeyTableName": "[Persons]",
20595+
"PrimaryKeyName": "[PersonID]",
20596+
"ReferencesPropertyName": "[PersonID]",
20597+
"ReferencesTableName": "[Orders]",
2059820598
"IsDestination": false
2059920599
}
2060020600
],
@@ -20607,28 +20607,28 @@
2060720607
"Dialect": "sqlserver",
2060820608
"ForeignKeyList": [
2060920609
{
20610-
"PrimaryKeyTableName": "Orders",
20611-
"PrimaryKeyName": "PersonID",
20612-
"ReferencesPropertyName": "PersonID",
20613-
"ReferencesTableName": "Persons",
20610+
"PrimaryKeyTableName": "[Orders]",
20611+
"PrimaryKeyName": "[PersonID]",
20612+
"ReferencesPropertyName": "[PersonID]",
20613+
"ReferencesTableName": "[Persons]",
2061420614
"IsDestination": true
2061520615
},
2061620616
{
20617-
"PrimaryKeyTableName": "Persons",
20618-
"PrimaryKeyName": "PersonID",
20619-
"ReferencesPropertyName": "PersonID",
20620-
"ReferencesTableName": "Orders",
20617+
"PrimaryKeyTableName": "[Persons]",
20618+
"PrimaryKeyName": "[PersonID]",
20619+
"ReferencesPropertyName": "[PersonID]",
20620+
"ReferencesTableName": "[Orders]",
2062120621
"IsDestination": false
2062220622
}
2062320623
],
2062420624
"PrimaryKeyList": [
2062520625
{
20626-
"PrimaryKeyTableName": "Persons",
20627-
"PrimaryKeyName": "PersonId"
20626+
"PrimaryKeyTableName": "[Persons]",
20627+
"PrimaryKeyName": "[PersonId]"
2062820628
},
2062920629
{
20630-
"PrimaryKeyTableName": "Orders",
20631-
"PrimaryKeyName": "OrderID"
20630+
"PrimaryKeyTableName": "[Orders]",
20631+
"PrimaryKeyName": "[OrderID]"
2063220632
}
2063320633
]
2063420634
}

0 commit comments

Comments
 (0)