Skip to content
This repository has been archived by the owner on Sep 30, 2024. It is now read-only.

Commit

Permalink
fix: foreign key scripting
Browse files Browse the repository at this point in the history
  • Loading branch information
justinlettau committed Jan 12, 2019
1 parent 18e0a40 commit b47cdf5
Show file tree
Hide file tree
Showing 6 changed files with 76 additions and 71 deletions.
1 change: 0 additions & 1 deletion src/commands/pull.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@ export default class Pull {
/**
* Spinner instance.
*/
// tslint:disable-next-line:typedef
private spinner = ora();

/**
Expand Down
1 change: 0 additions & 1 deletion src/commands/push.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ export default class Push {
/**
* Spinner instance.
*/
// tslint:disable-next-line:typedef
private spinner = ora();

/**
Expand Down
19 changes: 12 additions & 7 deletions src/generators/mssql.ts
Original file line number Diff line number Diff line change
Expand Up @@ -225,10 +225,6 @@ export default class MSSQLGenerator {
output += EOL;
});

if (foreignKeys.length && indexes.length) {
output += EOL;
}

const groupedIndexes = this.groupByName(indexes);
Object.keys(groupedIndexes).forEach(name => {
output += this.index(groupedIndexes[name]);
Expand Down Expand Up @@ -440,7 +436,7 @@ export default class MSSQLGenerator {
break;
}

if (item.collation_name) {
if (item.collation_name && !item.is_user_defined) {
output += ` COLLATE ${item.collation_name}`;
}

Expand Down Expand Up @@ -518,10 +514,16 @@ export default class MSSQLGenerator {
*/
private foreignKey(item: SqlForeignKey): string {
const objectId = `[${item.schema}].[${item.table}]`;
const keyObjectId = `[${item.schema}].[${item.name}]`;
const parentObjectId = `[${item.parent_schema}].[${item.parent_table}]`;
let output = '';

output += `ALTER TABLE ${objectId} WITH ${item.is_not_trusted ? 'NOCHECK' : 'CHECK'}`;
output += `IF NOT EXISTS (SELECT 1 FROM sys.foreign_keys WHERE object_id = OBJECT_ID('${keyObjectId}') AND parent_object_id = OBJECT_ID('${objectId}'))`;
output += EOL;
output += 'BEGIN';
output += EOL;

output += this.indent() + `ALTER TABLE ${objectId} WITH ${item.is_not_trusted ? 'NOCHECK' : 'CHECK'}`;
output += ` ADD CONSTRAINT [${item.name}] FOREIGN KEY ([${item.column}])`;
output += ` REFERENCES ${parentObjectId} ([${item.reference}])`;

Expand Down Expand Up @@ -550,7 +552,10 @@ export default class MSSQLGenerator {
}

output += EOL;
output += `ALTER TABLE ${objectId} CHECK CONSTRAINT [${item.name}]`;
output += this.indent() + `ALTER TABLE ${objectId} CHECK CONSTRAINT [${item.name}]`;
output += EOL;
output += 'END';
output += EOL;

return output;
}
Expand Down
1 change: 1 addition & 0 deletions src/queries/interfaces.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ export interface SqlColumn {
object_id: number;
name: string;
datatype: string;
is_user_defined: boolean;
max_length: number;
is_computed: boolean;
precision: number;
Expand Down
3 changes: 2 additions & 1 deletion src/queries/mssql.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ export const columnsRead = `
c.object_id,
c.name,
tp.name AS [datatype],
tp.is_user_defined,
c.max_length,
c.is_computed,
c.precision,
Expand Down Expand Up @@ -96,7 +97,7 @@ export const foreignKeysRead = `
c.name AS [column],
rc.name AS [reference],
fk.name,
SCHEMA_NAME(ro.schema_id) AS [schema],
SCHEMA_NAME(po.schema_id) AS [schema],
po.name AS [table],
SCHEMA_NAME(ro.schema_id) AS [parent_schema],
ro.name AS [parent_table],
Expand Down
122 changes: 61 additions & 61 deletions test/appveyor-cache.json
Original file line number Diff line number Diff line change
Expand Up @@ -60,74 +60,74 @@
"./_sql-database/tables/dbo.AWBuildVersion.sql": "29c80eba0303f1a759266e3cf4c5b330bf28bb7b",
"./_sql-database/tables/dbo.DatabaseLog.sql": "9b20616aecea60d1132431f20dce0fde9afb31de",
"./_sql-database/tables/dbo.ErrorLog.sql": "6c739cf6b1b1aa3961fe170e7d0a0ae923231dc6",
"./_sql-database/tables/HumanResources.Department.sql": "16e8a95f3380f90090c9e96ff5b408868305b6b5",
"./_sql-database/tables/HumanResources.Employee.sql": "9dba9bd03b686e6a2b0bf70f19daa45c3b4ca2ef",
"./_sql-database/tables/HumanResources.EmployeeDepartmentHistory.sql": "388d78e65b87d5f9de6074c549c381601d907b98",
"./_sql-database/tables/HumanResources.EmployeePayHistory.sql": "6509eac69c98d9a66aa6af0a1e53cd39f677a7fb",
"./_sql-database/tables/HumanResources.JobCandidate.sql": "9a346d58c5c8f29b4894e4a1e8d58f962be01bb2",
"./_sql-database/tables/HumanResources.Shift.sql": "f1953aeb0ae3de120d344d759c220dc6362180d6",
"./_sql-database/tables/Person.Address.sql": "28533f6e3d2ffe3c2b58f37b95b82b30df485b0a",
"./_sql-database/tables/Person.AddressType.sql": "0cc5fcebeadd8d09ee9ee357f35ab1937cc8dfab",
"./_sql-database/tables/HumanResources.Department.sql": "4bf0595e675d1c71d990a77fc33d68c396b0d241",
"./_sql-database/tables/HumanResources.Employee.sql": "efb72f408a7abffb1f530000d5dcf5a2ff975df6",
"./_sql-database/tables/HumanResources.EmployeeDepartmentHistory.sql": "384b0a3693eb66806a70443811915a52e5139821",
"./_sql-database/tables/HumanResources.EmployeePayHistory.sql": "e678293368b54c34b83cfbdd5ed3dbedc44abbe8",
"./_sql-database/tables/HumanResources.JobCandidate.sql": "dd7d9e12a1ae830f413c842bbde6722060272232",
"./_sql-database/tables/HumanResources.Shift.sql": "5412bee432ceac402b6fd77c6ecf87aa625bb38f",
"./_sql-database/tables/Person.Address.sql": "68680d701dff19b65fef954f220a8533b307404b",
"./_sql-database/tables/Person.AddressType.sql": "8e5a5bfbf1e131930b4140e13093f24def40241a",
"./_sql-database/tables/Person.BusinessEntity.sql": "974a196e5c5b127d95e7f85f24ac45e04117684a",
"./_sql-database/tables/Person.BusinessEntityAddress.sql": "d19d65c68026e7636409feb863278ddd98032538",
"./_sql-database/tables/Person.BusinessEntityContact.sql": "d340af0c1ef314f52675fc15258e89019ed9d0f3",
"./_sql-database/tables/Person.ContactType.sql": "c68b1b6e52beba70915e1800a1f5e4b8f8072311",
"./_sql-database/tables/Person.CountryRegion.sql": "b750353ffb7364461bd3c6c582cfb7cceb115a8e",
"./_sql-database/tables/Person.EmailAddress.sql": "9aa73683fb5f17bd59b3ed1745015f8d58061c65",
"./_sql-database/tables/Person.Password.sql": "ae070f1dfe70f94c64eb741b4b995a21165b7a02",
"./_sql-database/tables/Person.Person.sql": "26266d0e4ce5274b944a446b87f413e149bb5182",
"./_sql-database/tables/Person.PersonPhone.sql": "44e096956c3ddbda62fc3624c7e4134058c3c16d",
"./_sql-database/tables/Person.PhoneNumberType.sql": "b8a44911f6b6a15640ae5e5ce94649789057fb82",
"./_sql-database/tables/Person.StateProvince.sql": "6d6a771dd3efc03e2176763af93210be56a3e1f2",
"./_sql-database/tables/Production.BillOfMaterials.sql": "5ba81e841cbed8a4d084a6a4ed5d2294558d1bd8",
"./_sql-database/tables/Production.Culture.sql": "53427c04a478c3cd72950285861086be014e735b",
"./_sql-database/tables/Production.Document.sql": "8b258dc4e3dfda4d353a829c18b176ee94522792",
"./_sql-database/tables/Person.BusinessEntityAddress.sql": "b8f0dc95ff96356fd546f88027be3ec2549694a5",
"./_sql-database/tables/Person.BusinessEntityContact.sql": "db00db36a8c305369614ccc5b928e8597e3b1cc2",
"./_sql-database/tables/Person.ContactType.sql": "ae76fd3b5a19761acd6957cc95ef81b23bbc0458",
"./_sql-database/tables/Person.CountryRegion.sql": "6dcb67e6e55ec55854090e164562551a42eb0880",
"./_sql-database/tables/Person.EmailAddress.sql": "e94818c21608b6c16059debc16f29a09befe0f99",
"./_sql-database/tables/Person.Password.sql": "a41a0ec2d9436debe18d14814320d64039a6571f",
"./_sql-database/tables/Person.Person.sql": "adfd8437559df08805009a01a639406d7a06c614",
"./_sql-database/tables/Person.PersonPhone.sql": "aa5de40c666f70eecfc40a3067bfe01de5c8e123",
"./_sql-database/tables/Person.PhoneNumberType.sql": "b3f1927d41efef70d3163b872248fe10d59a2836",
"./_sql-database/tables/Person.StateProvince.sql": "7282919a39b919cf793bd7d5ddbc20a817aa418d",
"./_sql-database/tables/Production.BillOfMaterials.sql": "306c49bee053c831da96204ff2a5b7e0873b8f08",
"./_sql-database/tables/Production.Culture.sql": "669198dedd761006eab9c95d4c2787b81af382e7",
"./_sql-database/tables/Production.Document.sql": "4661d248da6edf9c8225398f3450e79eb35531ee",
"./_sql-database/tables/Production.Illustration.sql": "b52688b6f9683af379664a18d369ec37aa0a876b",
"./_sql-database/tables/Production.Location.sql": "e1f2ff0c307dff2f685331c31283ee9b34031c19",
"./_sql-database/tables/Production.Product.sql": "15cd2ad22366b1bf4c84454674399c0582903fac",
"./_sql-database/tables/Production.ProductCategory.sql": "030ed0a6766dc8092fba72ecffe23497c2c010a6",
"./_sql-database/tables/Production.ProductCostHistory.sql": "7f7612e7ce5b899e8cab43be6e04dd6cd428e819",
"./_sql-database/tables/Production.Location.sql": "3925e29b56e538ac8a809e628e10bf131e88c510",
"./_sql-database/tables/Production.Product.sql": "6772a934c8b90450de2593cff0cf08f29badd71f",
"./_sql-database/tables/Production.ProductCategory.sql": "fa70876299e8516c069f23fd487020382bb492dc",
"./_sql-database/tables/Production.ProductCostHistory.sql": "2f000a5d847fd588eb0e2731959497c116fe1766",
"./_sql-database/tables/Production.ProductDescription.sql": "53200ad11d1c00bb4c5aba33084a19f5d926610a",
"./_sql-database/tables/Production.ProductDocument.sql": "f13f01454d737929b928e3b522039c4e54edc61f",
"./_sql-database/tables/Production.ProductInventory.sql": "a4442cd1f38f63445f3cd3c86476e22761186c57",
"./_sql-database/tables/Production.ProductListPriceHistory.sql": "302e55ad539e07e3ec0fc6342919ba69d140a94e",
"./_sql-database/tables/Production.ProductModel.sql": "48a030d42ab5eb3366fd5a5df3e7a953df67d947",
"./_sql-database/tables/Production.ProductModelIllustration.sql": "495241be61408de5297867c0deb9f7f5f816ef7d",
"./_sql-database/tables/Production.ProductModelProductDescriptionCulture.sql": "847f155dd3fa587622b72460c1bc9eb63c347f3d",
"./_sql-database/tables/Production.ProductDocument.sql": "0bc9e98df535489220831e319911a3e91f37af84",
"./_sql-database/tables/Production.ProductInventory.sql": "7b7dd3eb81441b115f7dbd3653184b22d2884977",
"./_sql-database/tables/Production.ProductListPriceHistory.sql": "43a187a7830aecc7cac2c66679f65b0408812bd7",
"./_sql-database/tables/Production.ProductModel.sql": "45044e688a4df4b4145ef29b143ecacc0002d530",
"./_sql-database/tables/Production.ProductModelIllustration.sql": "a0fc4231412400c3778340c9bf591d3ef34bf9ad",
"./_sql-database/tables/Production.ProductModelProductDescriptionCulture.sql": "f7a4713f2c77236a2791f26ecc9e0951fcd2679b",
"./_sql-database/tables/Production.ProductPhoto.sql": "d7b72993e64484f44bb8932ed4e80a353cff329a",
"./_sql-database/tables/Production.ProductProductPhoto.sql": "a72f8c2ff0d4d1bc8d6edafb3589c917b54d422a",
"./_sql-database/tables/Production.ProductReview.sql": "6ffa28b9cad03c7c4f5b40603c75701dc69bb1f5",
"./_sql-database/tables/Production.ProductSubcategory.sql": "19a01581d4db46c88132f5a3b9ce7009ad8156d9",
"./_sql-database/tables/Production.ScrapReason.sql": "6f82e4146a5c13b824467c1f810fa549a15ee1dc",
"./_sql-database/tables/Production.TransactionHistory.sql": "d6e701ada56716b459fa8e2951f679dc2a9a8b5b",
"./_sql-database/tables/Production.ProductProductPhoto.sql": "13698d2287e6db1afbd1bec573381e2227c6cadd",
"./_sql-database/tables/Production.ProductReview.sql": "85ef51696acecab21e2d2944f3e9af874c916a90",
"./_sql-database/tables/Production.ProductSubcategory.sql": "4a42eb49408d68c684c801fdbf609a3226e2b35b",
"./_sql-database/tables/Production.ScrapReason.sql": "938430d791716420e4b87daf758fc33b7775f31e",
"./_sql-database/tables/Production.TransactionHistory.sql": "9a09d00eb017ea790aea36dc2dabcb2f094ecf6f",
"./_sql-database/tables/Production.TransactionHistoryArchive.sql": "bfc3780f6a06bccb1855e0f80e95528729a1452a",
"./_sql-database/tables/Production.UnitMeasure.sql": "3b56196cd9ed37fc8b68bf2c14c194942363d37e",
"./_sql-database/tables/Production.WorkOrder.sql": "aa9eb6ca4a0b493b809ca261e1736152e702ee1d",
"./_sql-database/tables/Production.WorkOrderRouting.sql": "1814119607a9daa157e9df8bfd55afe6c1b20c7c",
"./_sql-database/tables/Purchasing.ProductVendor.sql": "803d72c531bc8ca9e33e0b7769ef2f733e98eb97",
"./_sql-database/tables/Purchasing.PurchaseOrderDetail.sql": "f0fd395051953ca3f1c719893bca8889aa56a818",
"./_sql-database/tables/Purchasing.PurchaseOrderHeader.sql": "4434266c290c8f55da9395a1c74b75ccd51a40dc",
"./_sql-database/tables/Purchasing.ShipMethod.sql": "d5d9ffaa11f778f775d8540e60b6991eea6b4dd0",
"./_sql-database/tables/Purchasing.Vendor.sql": "d45c593a3a208e7db47159f8ba890f93d581b9d5",
"./_sql-database/tables/Sales.CountryRegionCurrency.sql": "1ba8a44b19e5c32758d13c52966f844486fe7a99",
"./_sql-database/tables/Production.UnitMeasure.sql": "fa9d2d7d7f3765d3b4207f387a00da1017caa2c4",
"./_sql-database/tables/Production.WorkOrder.sql": "2bb7abe8a821dc1186acd6fb48089b7253d84cf5",
"./_sql-database/tables/Production.WorkOrderRouting.sql": "e8bc4941b895aed4a22d72e164149c55a36c00f1",
"./_sql-database/tables/Purchasing.ProductVendor.sql": "5679232c7304bedb60db966e179f2ef2295d98e3",
"./_sql-database/tables/Purchasing.PurchaseOrderDetail.sql": "82fe42908da1126989ce6ab95870717099922cac",
"./_sql-database/tables/Purchasing.PurchaseOrderHeader.sql": "024907fda7c121dd6f519789d4246a3ac4f7ca73",
"./_sql-database/tables/Purchasing.ShipMethod.sql": "5394f2981ad744a8dbaee1a2c38ab71147341b51",
"./_sql-database/tables/Purchasing.Vendor.sql": "ced603aa7c11d0fb9d08382789c418063b0e0edd",
"./_sql-database/tables/Sales.CountryRegionCurrency.sql": "5622b3c4f006221a6f12a30c4939445e9d9493c6",
"./_sql-database/tables/Sales.CreditCard.sql": "f4af312a986ea206311b2cfaa53594be33932cb1",
"./_sql-database/tables/Sales.Currency.sql": "3331dc828656960bf1356ef6da6425feafd50668",
"./_sql-database/tables/Sales.CurrencyRate.sql": "45ad0e8274d3a4c40f9d40d23568e9c52288e998",
"./_sql-database/tables/Sales.Customer.sql": "eb190994f239ec543f8e745b98cb1bd538a0fd8e",
"./_sql-database/tables/Sales.PersonCreditCard.sql": "349d80cc451374128e5c3e3ea64fc7796d640007",
"./_sql-database/tables/Sales.SalesOrderDetail.sql": "8050b56682fa3d32aa13d34a03a69bf45adcff94",
"./_sql-database/tables/Sales.SalesOrderHeader.sql": "8abf378db9f7289f6b0aa25ae003fa52c1dc74bf",
"./_sql-database/tables/Sales.SalesOrderHeaderSalesReason.sql": "fe0a138ac26cddb3043dc06589a23f053d426894",
"./_sql-database/tables/Sales.SalesPerson.sql": "06d50274140d75ec99ddd84522878eb32125d800",
"./_sql-database/tables/Sales.SalesPersonQuotaHistory.sql": "0ba481672d45e61b4b2ddedc1e0d4d19f6a61855",
"./_sql-database/tables/Sales.SalesReason.sql": "0413b7e3e1ebf922d235daca3b17d98e6506a5ee",
"./_sql-database/tables/Sales.SalesTaxRate.sql": "85d482f23ff03285b2c263aa50a342ac94645ba1",
"./_sql-database/tables/Sales.SalesTerritory.sql": "62d33373deb7fb194207dca9d7beaa6be4d0ab0d",
"./_sql-database/tables/Sales.SalesTerritoryHistory.sql": "ea519cd56828fd219998eb54e330d87813d41e9e",
"./_sql-database/tables/Sales.ShoppingCartItem.sql": "ce1244b5f8939f831890faa9a24d56c5ea6e4991",
"./_sql-database/tables/Sales.Currency.sql": "fabf07099843b49440dcd19d8ba9ed1076c8f388",
"./_sql-database/tables/Sales.CurrencyRate.sql": "5d70f9ddae2217579f68385a51e87d383e22731f",
"./_sql-database/tables/Sales.Customer.sql": "05ef02be43fece57282fcbf4620ef784e77849f5",
"./_sql-database/tables/Sales.PersonCreditCard.sql": "d7ad3c50573afa566eea8b81d82c5e3a4cf893d0",
"./_sql-database/tables/Sales.SalesOrderDetail.sql": "f49f8e7285180f1fcb72d62bcb06a220f87c461f",
"./_sql-database/tables/Sales.SalesOrderHeader.sql": "73f740194dbd318306739fa19a9e7f9b61d32268",
"./_sql-database/tables/Sales.SalesOrderHeaderSalesReason.sql": "73ae5cd408599da33244513ad3b28b7e62c5c5e9",
"./_sql-database/tables/Sales.SalesPerson.sql": "eca6c6e1784db302f77ba4174d8309f1b531ab2f",
"./_sql-database/tables/Sales.SalesPersonQuotaHistory.sql": "ef550aaf480d195cad77ee64012550d84bfc32f5",
"./_sql-database/tables/Sales.SalesReason.sql": "f96124a0f52cdd19f97c33c9509628910e3f7e04",
"./_sql-database/tables/Sales.SalesTaxRate.sql": "b5c4fc5b8a700208102c44ce43a2d21984fe0f7c",
"./_sql-database/tables/Sales.SalesTerritory.sql": "08b85a0de37219f9490188427a94436edaeb6c2f",
"./_sql-database/tables/Sales.SalesTerritoryHistory.sql": "7fd2e928aaa27334d5b48c5d939e14cb74db3f37",
"./_sql-database/tables/Sales.ShoppingCartItem.sql": "8206e8481d09d11bc70a9641da950455fe50e154",
"./_sql-database/tables/Sales.SpecialOffer.sql": "6a4dd953f1199f84324869d412ddc76b3783e85d",
"./_sql-database/tables/Sales.SpecialOfferProduct.sql": "6acdd20db2f090ef458a5b75fe8c62f1a5de2070",
"./_sql-database/tables/Sales.Store.sql": "618ef5a705beb8f46a0368ac1b41a7f08af9be1b",
"./_sql-database/tables/Sales.SpecialOfferProduct.sql": "d64c059bc3e4d7f6f5843f7c973d6d36f06100f9",
"./_sql-database/tables/Sales.Store.sql": "2df1f5fcafd6c96952bbebc30303810110c26d12",
"./_sql-database/data/Person.AddressType.sql": "7fe76948d9f9e7a3c1f2a14dbb2801b869637f22",
"./_sql-database/data/Person.ContactType.sql": "587c5aaa9720bd5021d062dfaf6ee58c703223b5",
"./_sql-database/data/Person.CountryRegion.sql": "995b413ea7a8eeb5e6ec47ceba45cf17d8186305",
Expand Down

0 comments on commit b47cdf5

Please sign in to comment.