diff --git a/.gitattributes b/.gitattributes index d13affe36..57e59ae20 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,2 +1,11 @@ +# +# https://help.github.com/articles/dealing-with-line-endings/ +# +# Linux start script should use lf +/gradlew text eol=lf + +# These are Windows script files and should use crlf +*.bat text eol=crlf + # Ensure all Java files use LF. *.java eol=lf diff --git a/changelog.md b/changelog.md index 5da360c4e..7befbd75a 100644 --- a/changelog.md +++ b/changelog.md @@ -6,6 +6,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased +### Changed +- [Fix an SQL script generation order issue when there are multiple associations](https://github.com/ballerina-platform/ballerina-library/issues/7921) + +## [1.4.0] - 2024-08-20 + ### Changed - Fix an issue where client API is still generated even if all entities contain unsupported field(s) - Fix an issue where unique indexes are declared twice in script.sql in one-to-one associations diff --git a/persist-cli-tests/src/test/java/io/ballerina/persist/tools/ToolingGenerateTest.java b/persist-cli-tests/src/test/java/io/ballerina/persist/tools/ToolingGenerateTest.java index fa64ce7b2..9aa9c60df 100644 --- a/persist-cli-tests/src/test/java/io/ballerina/persist/tools/ToolingGenerateTest.java +++ b/persist-cli-tests/src/test/java/io/ballerina/persist/tools/ToolingGenerateTest.java @@ -1094,6 +1094,18 @@ public void testGenerateEntitiesWithMultipleDBSchemas() { assertGeneratedSources(subDir); } + @Test(enabled = true) + @Description("The model has multiple tables with different relations and test table creation order") + public void testGenerateSQLScriptWithRelations() { + String subDir = "tool_test_generate_114"; + updateOutputBallerinaToml(subDir); + executeGenerateCommand(subDir, "--datastore", "mysql", "--module", "entities"); + executeGenerateCommand(subDir, "--datastore", "mssql", "--module", "mssql_entities"); + executeGenerateCommand(subDir, "--datastore", "h2", "--module", "h2_entities"); + executeGenerateCommand(subDir, "--datastore", "postgresql", "--module", "postgresql_entities"); + assertGeneratedSources(subDir); + } + private void updateOutputBallerinaToml(String fileName) { String tomlFileName = "Ballerina.toml"; Path filePath = Paths.get("src", "test", "resources", "test-src", "output", fileName, tomlFileName); diff --git a/persist-cli-tests/src/test/resources/test-src/input/tool_test_generate_114/Ballerina.toml b/persist-cli-tests/src/test/resources/test-src/input/tool_test_generate_114/Ballerina.toml new file mode 100644 index 000000000..93b6ccbc4 --- /dev/null +++ b/persist-cli-tests/src/test/resources/test-src/input/tool_test_generate_114/Ballerina.toml @@ -0,0 +1,8 @@ +[package] +org = "foo" +name = "tool_test_generate_114" +version = "0.1.0" +distribution = "2201.12.0" + +[build-options] +observabilityIncluded = true diff --git a/persist-cli-tests/src/test/resources/test-src/input/tool_test_generate_114/main.bal b/persist-cli-tests/src/test/resources/test-src/input/tool_test_generate_114/main.bal new file mode 100644 index 000000000..af2f50189 --- /dev/null +++ b/persist-cli-tests/src/test/resources/test-src/input/tool_test_generate_114/main.bal @@ -0,0 +1,21 @@ +// Copyright (c) 2025 WSO2 LLC. (http://www.wso2.com). +// +// WSO2 LLC. licenses this file to you under the Apache License, +// Version 2.0 (the "License"); you may not use this file except +// in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +import ballerina/io; + +public function main() { + io:println("Hello, World!"); +} diff --git a/persist-cli-tests/src/test/resources/test-src/input/tool_test_generate_114/persist/model.bal b/persist-cli-tests/src/test/resources/test-src/input/tool_test_generate_114/persist/model.bal new file mode 100644 index 000000000..0da58c08b --- /dev/null +++ b/persist-cli-tests/src/test/resources/test-src/input/tool_test_generate_114/persist/model.bal @@ -0,0 +1,91 @@ +// Copyright (c) 2025 WSO2 LLC. (http://www.wso2.org). +// +// WSO2 LLC. licenses this file to you under the Apache License, +// Version 2.0 (the "License"); you may not use this file except +// in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +import ballerina/persist as _; +import ballerinax/persist.sql; + +@sql:Name {value: "codesystems"} +public type CodeSystem record {| + @sql:Generated + readonly int codeSystemId; + string id; + string url; + string version; + string name; + string title; + string status; + string date; + string publisher; + byte[] codeSystem; + Concept[] concepts; +|}; + +@sql:Name {value: "concepts"} +public type Concept record {| + @sql:Generated + readonly int conceptId; + string code; + byte[] concept; + int? parentConceptId; + CodeSystem codeSystem; + ValueSetComposeIncludeConcept[] valuesetcomposeincludeconcept; +|}; + +@sql:Name {value: "valuesets"} +public type ValueSet record {| + @sql:Generated + readonly int valueSetId; + string id; + string url; + string version; + string name; + string title; + string status; + string date; + string publisher; + byte[] valueSet; + ValueSetComposeInclude[] composes; + ValueSetComposeIncludeValueSet[] conceptsInValueSetConcepts; +|}; + +@sql:Name {value: "valueset_compose_includes"} +public type ValueSetComposeInclude record {| + @sql:Generated + readonly int valueSetComposeIncludeId; + boolean systemFlag; + boolean valueSetFlag; + boolean conceptFlag; + ValueSet valueSet; + ValueSetComposeIncludeValueSet[] valuesetcomposeincludevalueset; + ValueSetComposeIncludeConcept[] valuesetcomposeincludeconcept; + int? codeSystemId; +|}; + +@sql:Name {value: "valueset_compose_include_value_sets"} +public type ValueSetComposeIncludeValueSet record {| + @sql:Generated + readonly int valueSetComposeIncludeValueSetId; + ValueSetComposeInclude valuesetCompose; + ValueSet valueset; +|}; + +@sql:Name {value: "valueset_compose_include_concepts"} +public type ValueSetComposeIncludeConcept record {| + @sql:Generated + readonly int valueSetComposeIncludeConceptId; + ValueSetComposeInclude valuesetCompose; + Concept concept; +|}; diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_1/modules/script.sql b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_1/modules/script.sql index ba7ced356..9c7f228c1 100644 --- a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_1/modules/script.sql +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_1/modules/script.sql @@ -5,14 +5,8 @@ DROP TABLE IF EXISTS `Workspace`; DROP TABLE IF EXISTS `Employee`; -DROP TABLE IF EXISTS `Building`; DROP TABLE IF EXISTS `Department`; - -CREATE TABLE `Department` ( - `deptNo` VARCHAR(10) NOT NULL, - `deptName` VARCHAR(191) NOT NULL, - PRIMARY KEY(`deptNo`) -); +DROP TABLE IF EXISTS `Building`; CREATE TABLE `Building` ( `buildingCode` VARCHAR(191) NOT NULL, @@ -23,6 +17,12 @@ CREATE TABLE `Building` ( PRIMARY KEY(`buildingCode`) ); +CREATE TABLE `Department` ( + `deptNo` VARCHAR(10) NOT NULL, + `deptName` VARCHAR(191) NOT NULL, + PRIMARY KEY(`deptNo`) +); + CREATE TABLE `Employee` ( `empNo` VARCHAR(191) NOT NULL, `firstName` VARCHAR(191) NOT NULL, @@ -44,3 +44,5 @@ CREATE TABLE `Workspace` ( FOREIGN KEY(`employeeEmpNo`) REFERENCES `Employee`(`empNo`), PRIMARY KEY(`workspaceId`) ); + + diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_101/modules/entities/persist_test_init.bal b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_101/modules/entities/persist_test_init.bal index 1724981b6..8d61e6e1c 100644 --- a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_101/modules/entities/persist_test_init.bal +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_101/modules/entities/persist_test_init.bal @@ -14,8 +14,6 @@ CREATE TABLE "Car" ( "id" INT NOT NULL, "make" VARCHAR(191) NOT NULL, "model" VARCHAR(191) NOT NULL, - "ownerId" INT NOT NULL, - FOREIGN KEY("ownerId") REFERENCES "User"("id"), PRIMARY KEY("id") );`); } diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_101/modules/entities/script.sql b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_101/modules/entities/script.sql index a91382b32..3449f3dbc 100644 --- a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_101/modules/entities/script.sql +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_101/modules/entities/script.sql @@ -9,8 +9,6 @@ CREATE TABLE `Car` ( `id` INT NOT NULL, `make` VARCHAR(191) NOT NULL, `model` VARCHAR(191) NOT NULL, - `ownerId` INT NOT NULL, - FOREIGN KEY(`ownerId`) REFERENCES `User`(`id`), PRIMARY KEY(`id`) ); diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_101/modules/h2_entities/persist_test_init.bal b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_101/modules/h2_entities/persist_test_init.bal index 1724981b6..8d61e6e1c 100644 --- a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_101/modules/h2_entities/persist_test_init.bal +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_101/modules/h2_entities/persist_test_init.bal @@ -14,8 +14,6 @@ CREATE TABLE "Car" ( "id" INT NOT NULL, "make" VARCHAR(191) NOT NULL, "model" VARCHAR(191) NOT NULL, - "ownerId" INT NOT NULL, - FOREIGN KEY("ownerId") REFERENCES "User"("id"), PRIMARY KEY("id") );`); } diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_101/modules/h2_entities/script.sql b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_101/modules/h2_entities/script.sql index a99b9f72e..9cd7c826b 100644 --- a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_101/modules/h2_entities/script.sql +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_101/modules/h2_entities/script.sql @@ -9,8 +9,6 @@ CREATE TABLE "Car" ( "id" INT NOT NULL, "make" VARCHAR(191) NOT NULL, "model" VARCHAR(191) NOT NULL, - "ownerId" INT NOT NULL, - FOREIGN KEY("ownerId") REFERENCES "User"("id"), PRIMARY KEY("id") ); diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_101/modules/mssql_entities/persist_test_init.bal b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_101/modules/mssql_entities/persist_test_init.bal index 1724981b6..8d61e6e1c 100644 --- a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_101/modules/mssql_entities/persist_test_init.bal +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_101/modules/mssql_entities/persist_test_init.bal @@ -14,8 +14,6 @@ CREATE TABLE "Car" ( "id" INT NOT NULL, "make" VARCHAR(191) NOT NULL, "model" VARCHAR(191) NOT NULL, - "ownerId" INT NOT NULL, - FOREIGN KEY("ownerId") REFERENCES "User"("id"), PRIMARY KEY("id") );`); } diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_101/modules/mssql_entities/script.sql b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_101/modules/mssql_entities/script.sql index 1dde3bb04..61e449470 100644 --- a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_101/modules/mssql_entities/script.sql +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_101/modules/mssql_entities/script.sql @@ -9,8 +9,6 @@ CREATE TABLE [Car] ( [id] INT NOT NULL, [make] VARCHAR(191) NOT NULL, [model] VARCHAR(191) NOT NULL, - [ownerId] INT NOT NULL, - FOREIGN KEY([ownerId]) REFERENCES [User]([id]), PRIMARY KEY([id]) ); diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_101/modules/postgresql_entities/persist_test_init.bal b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_101/modules/postgresql_entities/persist_test_init.bal index 1724981b6..8d61e6e1c 100644 --- a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_101/modules/postgresql_entities/persist_test_init.bal +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_101/modules/postgresql_entities/persist_test_init.bal @@ -14,8 +14,6 @@ CREATE TABLE "Car" ( "id" INT NOT NULL, "make" VARCHAR(191) NOT NULL, "model" VARCHAR(191) NOT NULL, - "ownerId" INT NOT NULL, - FOREIGN KEY("ownerId") REFERENCES "User"("id"), PRIMARY KEY("id") );`); } diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_101/modules/postgresql_entities/script.sql b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_101/modules/postgresql_entities/script.sql index a99b9f72e..9cd7c826b 100644 --- a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_101/modules/postgresql_entities/script.sql +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_101/modules/postgresql_entities/script.sql @@ -9,8 +9,6 @@ CREATE TABLE "Car" ( "id" INT NOT NULL, "make" VARCHAR(191) NOT NULL, "model" VARCHAR(191) NOT NULL, - "ownerId" INT NOT NULL, - FOREIGN KEY("ownerId") REFERENCES "User"("id"), PRIMARY KEY("id") ); diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_106/modules/entities/script.sql b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_106/modules/entities/script.sql index 1c128f1cb..174893cc2 100644 --- a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_106/modules/entities/script.sql +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_106/modules/entities/script.sql @@ -5,23 +5,23 @@ DROP TABLE IF EXISTS `Car2`; DROP TABLE IF EXISTS `Car`; -DROP TABLE IF EXISTS `User`; DROP TABLE IF EXISTS `User2`; +DROP TABLE IF EXISTS `User`; -CREATE TABLE `User2` ( +CREATE TABLE `User` ( `id` INT NOT NULL, - `nic` VARCHAR(191) NOT NULL, `name` VARCHAR(191) NOT NULL, + `nic` VARCHAR(191) NOT NULL, `salary` DECIMAL(65,30), - PRIMARY KEY(`id`,`nic`) + PRIMARY KEY(`id`) ); -CREATE TABLE `User` ( +CREATE TABLE `User2` ( `id` INT NOT NULL, - `name` VARCHAR(191) NOT NULL, `nic` VARCHAR(191) NOT NULL, + `name` VARCHAR(191) NOT NULL, `salary` DECIMAL(65,30), - PRIMARY KEY(`id`) + PRIMARY KEY(`id`,`nic`) ); CREATE TABLE `Car` ( diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_106/modules/h2_entities/script.sql b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_106/modules/h2_entities/script.sql index 9b20af0f5..a8a1c3a74 100644 --- a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_106/modules/h2_entities/script.sql +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_106/modules/h2_entities/script.sql @@ -5,23 +5,23 @@ DROP TABLE IF EXISTS "Car2"; DROP TABLE IF EXISTS "Car"; -DROP TABLE IF EXISTS "User"; DROP TABLE IF EXISTS "User2"; +DROP TABLE IF EXISTS "User"; -CREATE TABLE "User2" ( +CREATE TABLE "User" ( "id" INT NOT NULL, - "nic" VARCHAR(191) NOT NULL, "name" VARCHAR(191) NOT NULL, + "nic" VARCHAR(191) NOT NULL, "salary" DECIMAL(65,30), - PRIMARY KEY("id","nic") + PRIMARY KEY("id") ); -CREATE TABLE "User" ( +CREATE TABLE "User2" ( "id" INT NOT NULL, - "name" VARCHAR(191) NOT NULL, "nic" VARCHAR(191) NOT NULL, + "name" VARCHAR(191) NOT NULL, "salary" DECIMAL(65,30), - PRIMARY KEY("id") + PRIMARY KEY("id","nic") ); CREATE TABLE "Car" ( diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_106/modules/mssql_entities/script.sql b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_106/modules/mssql_entities/script.sql index a36efe595..00c49a06b 100644 --- a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_106/modules/mssql_entities/script.sql +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_106/modules/mssql_entities/script.sql @@ -5,23 +5,23 @@ DROP TABLE IF EXISTS [Car2]; DROP TABLE IF EXISTS [Car]; -DROP TABLE IF EXISTS [User]; DROP TABLE IF EXISTS [User2]; +DROP TABLE IF EXISTS [User]; -CREATE TABLE [User2] ( +CREATE TABLE [User] ( [id] INT NOT NULL, - [nic] VARCHAR(191) NOT NULL, [name] VARCHAR(191) NOT NULL, + [nic] VARCHAR(191) NOT NULL, [salary] DECIMAL(38,30), - PRIMARY KEY([id],[nic]) + PRIMARY KEY([id]) ); -CREATE TABLE [User] ( +CREATE TABLE [User2] ( [id] INT NOT NULL, - [name] VARCHAR(191) NOT NULL, [nic] VARCHAR(191) NOT NULL, + [name] VARCHAR(191) NOT NULL, [salary] DECIMAL(38,30), - PRIMARY KEY([id]) + PRIMARY KEY([id],[nic]) ); CREATE TABLE [Car] ( diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_106/modules/postgresql_entities/script.sql b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_106/modules/postgresql_entities/script.sql index 9b20af0f5..a8a1c3a74 100644 --- a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_106/modules/postgresql_entities/script.sql +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_106/modules/postgresql_entities/script.sql @@ -5,23 +5,23 @@ DROP TABLE IF EXISTS "Car2"; DROP TABLE IF EXISTS "Car"; -DROP TABLE IF EXISTS "User"; DROP TABLE IF EXISTS "User2"; +DROP TABLE IF EXISTS "User"; -CREATE TABLE "User2" ( +CREATE TABLE "User" ( "id" INT NOT NULL, - "nic" VARCHAR(191) NOT NULL, "name" VARCHAR(191) NOT NULL, + "nic" VARCHAR(191) NOT NULL, "salary" DECIMAL(65,30), - PRIMARY KEY("id","nic") + PRIMARY KEY("id") ); -CREATE TABLE "User" ( +CREATE TABLE "User2" ( "id" INT NOT NULL, - "name" VARCHAR(191) NOT NULL, "nic" VARCHAR(191) NOT NULL, + "name" VARCHAR(191) NOT NULL, "salary" DECIMAL(65,30), - PRIMARY KEY("id") + PRIMARY KEY("id","nic") ); CREATE TABLE "Car" ( diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_107_h2/modules/entities/script.sql b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_107_h2/modules/entities/script.sql index 59dc7e8ca..9d884addd 100644 --- a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_107_h2/modules/entities/script.sql +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_107_h2/modules/entities/script.sql @@ -3,69 +3,45 @@ -- This file is an auto-generated file by Ballerina persistence layer for model. -- Please verify the generated scripts and execute them against the target DB server. -DROP TABLE IF EXISTS "CompositeAssociationRecord"; DROP TABLE IF EXISTS "Comment"; -DROP TABLE IF EXISTS "Follow"; DROP TABLE IF EXISTS "Employee"; +DROP TABLE IF EXISTS "CompositeAssociationRecord"; DROP TABLE IF EXISTS "Post"; +DROP TABLE IF EXISTS "Follow"; DROP TABLE IF EXISTS "Workspace"; -DROP TABLE IF EXISTS "Building"; -DROP TABLE IF EXISTS "IntIdRecord"; -DROP TABLE IF EXISTS "User"; -DROP TABLE IF EXISTS "AllTypes"; -DROP TABLE IF EXISTS "DecimalIdRecord"; -DROP TABLE IF EXISTS "StringIdRecord"; -DROP TABLE IF EXISTS "AllTypesIdRecord"; -DROP TABLE IF EXISTS "Department"; -DROP TABLE IF EXISTS "BooleanIdRecord"; -DROP TABLE IF EXISTS "OrderItem"; DROP TABLE IF EXISTS "FloatIdRecord"; +DROP TABLE IF EXISTS "OrderItem"; +DROP TABLE IF EXISTS "BooleanIdRecord"; +DROP TABLE IF EXISTS "Department"; +DROP TABLE IF EXISTS "AllTypesIdRecord"; +DROP TABLE IF EXISTS "StringIdRecord"; +DROP TABLE IF EXISTS "DecimalIdRecord"; +DROP TABLE IF EXISTS "AllTypes"; +DROP TABLE IF EXISTS "User"; +DROP TABLE IF EXISTS "IntIdRecord"; +DROP TABLE IF EXISTS "Building"; -CREATE TABLE "FloatIdRecord" ( - "id" FLOAT NOT NULL, - "randomField" VARCHAR(191) NOT NULL, - PRIMARY KEY("id") -); - -CREATE TABLE "OrderItem" ( - "orderId" VARCHAR(191) NOT NULL, - "itemId" VARCHAR(191) NOT NULL, - "quantity" INT NOT NULL, - "notes" VARCHAR(191) NOT NULL, - PRIMARY KEY("orderId","itemId") -); - -CREATE TABLE "BooleanIdRecord" ( - "id" BOOLEAN NOT NULL, - "randomField" VARCHAR(191) NOT NULL, - PRIMARY KEY("id") -); - -CREATE TABLE "Department" ( - "deptNo" VARCHAR(191) NOT NULL, - "deptName" VARCHAR(191) NOT NULL, - PRIMARY KEY("deptNo") -); - -CREATE TABLE "AllTypesIdRecord" ( - "booleanType" BOOLEAN NOT NULL, - "intType" INT NOT NULL, - "floatType" FLOAT NOT NULL, - "decimalType" DECIMAL(65,30) NOT NULL, - "stringType" VARCHAR(191) NOT NULL, - "randomField" VARCHAR(191) NOT NULL, - PRIMARY KEY("booleanType","intType","floatType","decimalType","stringType") +CREATE TABLE "Building" ( + "buildingCode" VARCHAR(191) NOT NULL, + "city" VARCHAR(191) NOT NULL, + "state" VARCHAR(191) NOT NULL, + "country" VARCHAR(191) NOT NULL, + "postalCode" VARCHAR(191) NOT NULL, + "type" VARCHAR(191) NOT NULL, + PRIMARY KEY("buildingCode") ); -CREATE TABLE "StringIdRecord" ( - "id" VARCHAR(191) NOT NULL, +CREATE TABLE "IntIdRecord" ( + "id" INT NOT NULL, "randomField" VARCHAR(191) NOT NULL, PRIMARY KEY("id") ); -CREATE TABLE "DecimalIdRecord" ( - "id" DECIMAL(65,30) NOT NULL, - "randomField" VARCHAR(191) NOT NULL, +CREATE TABLE "User" ( + "id" INT NOT NULL, + "name" VARCHAR(191) NOT NULL, + "birthDate" DATE NOT NULL, + "mobileNumber" VARCHAR(191) NOT NULL, PRIMARY KEY("id") ); @@ -96,28 +72,52 @@ CREATE TABLE "AllTypes" ( PRIMARY KEY("id") ); -CREATE TABLE "User" ( - "id" INT NOT NULL, - "name" VARCHAR(191) NOT NULL, - "birthDate" DATE NOT NULL, - "mobileNumber" VARCHAR(191) NOT NULL, +CREATE TABLE "DecimalIdRecord" ( + "id" DECIMAL(65,30) NOT NULL, + "randomField" VARCHAR(191) NOT NULL, PRIMARY KEY("id") ); -CREATE TABLE "IntIdRecord" ( - "id" INT NOT NULL, +CREATE TABLE "StringIdRecord" ( + "id" VARCHAR(191) NOT NULL, "randomField" VARCHAR(191) NOT NULL, PRIMARY KEY("id") ); -CREATE TABLE "Building" ( - "buildingCode" VARCHAR(191) NOT NULL, - "city" VARCHAR(191) NOT NULL, - "state" VARCHAR(191) NOT NULL, - "country" VARCHAR(191) NOT NULL, - "postalCode" VARCHAR(191) NOT NULL, - "type" VARCHAR(191) NOT NULL, - PRIMARY KEY("buildingCode") +CREATE TABLE "AllTypesIdRecord" ( + "booleanType" BOOLEAN NOT NULL, + "intType" INT NOT NULL, + "floatType" FLOAT NOT NULL, + "decimalType" DECIMAL(65,30) NOT NULL, + "stringType" VARCHAR(191) NOT NULL, + "randomField" VARCHAR(191) NOT NULL, + PRIMARY KEY("booleanType","intType","floatType","decimalType","stringType") +); + +CREATE TABLE "Department" ( + "deptNo" VARCHAR(191) NOT NULL, + "deptName" VARCHAR(191) NOT NULL, + PRIMARY KEY("deptNo") +); + +CREATE TABLE "BooleanIdRecord" ( + "id" BOOLEAN NOT NULL, + "randomField" VARCHAR(191) NOT NULL, + PRIMARY KEY("id") +); + +CREATE TABLE "OrderItem" ( + "orderId" VARCHAR(191) NOT NULL, + "itemId" VARCHAR(191) NOT NULL, + "quantity" INT NOT NULL, + "notes" VARCHAR(191) NOT NULL, + PRIMARY KEY("orderId","itemId") +); + +CREATE TABLE "FloatIdRecord" ( + "id" FLOAT NOT NULL, + "randomField" VARCHAR(191) NOT NULL, + PRIMARY KEY("id") ); CREATE TABLE "Workspace" ( @@ -128,6 +128,16 @@ CREATE TABLE "Workspace" ( PRIMARY KEY("workspaceId") ); +CREATE TABLE "Follow" ( + "id" INT NOT NULL, + "timestamp" DATETIME NOT NULL, + "leaderId" INT NOT NULL, + FOREIGN KEY("leaderId") REFERENCES "User"("id"), + "followerId" INT NOT NULL, + FOREIGN KEY("followerId") REFERENCES "User"("id"), + PRIMARY KEY("id") +); + CREATE TABLE "Post" ( "id" INT NOT NULL, "description" VARCHAR(191) NOT NULL, @@ -139,6 +149,19 @@ CREATE TABLE "Post" ( PRIMARY KEY("id") ); +CREATE TABLE "CompositeAssociationRecord" ( + "id" VARCHAR(191) NOT NULL, + "randomField" VARCHAR(191) NOT NULL, + "alltypesidrecordBooleanType" BOOLEAN NOT NULL, + "alltypesidrecordIntType" INT NOT NULL, + "alltypesidrecordFloatType" FLOAT NOT NULL, + "alltypesidrecordDecimalType" DECIMAL(65,30) NOT NULL, + "alltypesidrecordStringType" VARCHAR(191) NOT NULL, + UNIQUE ("alltypesidrecordBooleanType", "alltypesidrecordIntType", "alltypesidrecordFloatType", "alltypesidrecordDecimalType", "alltypesidrecordStringType"), + FOREIGN KEY("alltypesidrecordBooleanType", "alltypesidrecordIntType", "alltypesidrecordFloatType", "alltypesidrecordDecimalType", "alltypesidrecordStringType") REFERENCES "AllTypesIdRecord"("booleanType", "intType", "floatType", "decimalType", "stringType"), + PRIMARY KEY("id") +); + CREATE TABLE "Employee" ( "empNo" VARCHAR(191) NOT NULL, "firstName" VARCHAR(191) NOT NULL, @@ -153,16 +176,6 @@ CREATE TABLE "Employee" ( PRIMARY KEY("empNo") ); -CREATE TABLE "Follow" ( - "id" INT NOT NULL, - "timestamp" DATETIME NOT NULL, - "leaderId" INT NOT NULL, - FOREIGN KEY("leaderId") REFERENCES "User"("id"), - "followerId" INT NOT NULL, - FOREIGN KEY("followerId") REFERENCES "User"("id"), - PRIMARY KEY("id") -); - CREATE TABLE "Comment" ( "id" INT NOT NULL, "comment" VARCHAR(191) NOT NULL, @@ -174,17 +187,4 @@ CREATE TABLE "Comment" ( PRIMARY KEY("id") ); -CREATE TABLE "CompositeAssociationRecord" ( - "id" VARCHAR(191) NOT NULL, - "randomField" VARCHAR(191) NOT NULL, - "alltypesidrecordBooleanType" BOOLEAN NOT NULL, - "alltypesidrecordIntType" INT NOT NULL, - "alltypesidrecordFloatType" FLOAT NOT NULL, - "alltypesidrecordDecimalType" DECIMAL(65,30) NOT NULL, - "alltypesidrecordStringType" VARCHAR(191) NOT NULL, - UNIQUE ("alltypesidrecordBooleanType", "alltypesidrecordIntType", "alltypesidrecordFloatType", "alltypesidrecordDecimalType", "alltypesidrecordStringType"), - FOREIGN KEY("alltypesidrecordBooleanType", "alltypesidrecordIntType", "alltypesidrecordFloatType", "alltypesidrecordDecimalType", "alltypesidrecordStringType") REFERENCES "AllTypesIdRecord"("booleanType", "intType", "floatType", "decimalType", "stringType"), - PRIMARY KEY("id") -); - diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_108_h2/modules/entities/script.sql b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_108_h2/modules/entities/script.sql index a19c482d5..ef43e8652 100644 --- a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_108_h2/modules/entities/script.sql +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_108_h2/modules/entities/script.sql @@ -5,23 +5,9 @@ DROP TABLE IF EXISTS "Employee"; DROP TABLE IF EXISTS "Workspace"; -DROP TABLE IF EXISTS "Building"; -DROP TABLE IF EXISTS "Department"; DROP TABLE IF EXISTS "OrderItem"; - -CREATE TABLE "OrderItem" ( - "orderId" VARCHAR(191) NOT NULL, - "itemId" VARCHAR(191) NOT NULL, - "quantity" INT NOT NULL, - "notes" VARCHAR(191) NOT NULL, - PRIMARY KEY("orderId","itemId") -); - -CREATE TABLE "Department" ( - "deptNo" VARCHAR(191) NOT NULL, - "deptName" VARCHAR(191) NOT NULL, - PRIMARY KEY("deptNo") -); +DROP TABLE IF EXISTS "Department"; +DROP TABLE IF EXISTS "Building"; CREATE TABLE "Building" ( "buildingCode" VARCHAR(191) NOT NULL, @@ -33,6 +19,20 @@ CREATE TABLE "Building" ( PRIMARY KEY("buildingCode") ); +CREATE TABLE "Department" ( + "deptNo" VARCHAR(191) NOT NULL, + "deptName" VARCHAR(191) NOT NULL, + PRIMARY KEY("deptNo") +); + +CREATE TABLE "OrderItem" ( + "orderId" VARCHAR(191) NOT NULL, + "itemId" VARCHAR(191) NOT NULL, + "quantity" INT NOT NULL, + "notes" VARCHAR(191) NOT NULL, + PRIMARY KEY("orderId","itemId") +); + CREATE TABLE "Workspace" ( "workspaceId" VARCHAR(191) NOT NULL, "workspaceType" VARCHAR(191) NOT NULL, diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_109_h2/modules/entities/persist_test_init.bal b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_109_h2/modules/entities/persist_test_init.bal index c5fed271c..df96f13f0 100644 --- a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_109_h2/modules/entities/persist_test_init.bal +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_109_h2/modules/entities/persist_test_init.bal @@ -10,16 +10,18 @@ isolated final H2Client h2Client = check new ("jdbc:h2:./test", "sa", ""); public isolated function setupTestDB() returns persist:Error? { _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Employee";`); _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Workspace";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Building";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Department";`); _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "OrderItem";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Department";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Building";`); _ = check h2Client->executeNativeSQL(` -CREATE TABLE "OrderItem" ( - "orderId" VARCHAR(191) NOT NULL, - "itemId" VARCHAR(191) NOT NULL, - "quantity" INT NOT NULL, - "notes" VARCHAR(191) NOT NULL, - PRIMARY KEY("orderId","itemId") +CREATE TABLE "Building" ( + "buildingCode" VARCHAR(191) NOT NULL, + "city" VARCHAR(191) NOT NULL, + "state" VARCHAR(191) NOT NULL, + "country" VARCHAR(191) NOT NULL, + "postalCode" VARCHAR(191) NOT NULL, + "type" VARCHAR(191) NOT NULL, + PRIMARY KEY("buildingCode") );`); _ = check h2Client->executeNativeSQL(` CREATE TABLE "Department" ( @@ -29,14 +31,12 @@ CREATE TABLE "Department" ( PRIMARY KEY("deptNo","deptName") );`); _ = check h2Client->executeNativeSQL(` -CREATE TABLE "Building" ( - "buildingCode" VARCHAR(191) NOT NULL, - "city" VARCHAR(191) NOT NULL, - "state" VARCHAR(191) NOT NULL, - "country" VARCHAR(191) NOT NULL, - "postalCode" VARCHAR(191) NOT NULL, - "type" VARCHAR(191) NOT NULL, - PRIMARY KEY("buildingCode") +CREATE TABLE "OrderItem" ( + "orderId" VARCHAR(191) NOT NULL, + "itemId" VARCHAR(191) NOT NULL, + "quantity" INT NOT NULL, + "notes" VARCHAR(191) NOT NULL, + PRIMARY KEY("orderId","itemId") );`); _ = check h2Client->executeNativeSQL(` CREATE TABLE "Workspace" ( @@ -67,8 +67,8 @@ CREATE TABLE "Employee" ( public isolated function cleanupTestDB() returns persist:Error? { _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Employee";`); _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Workspace";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Building";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Department";`); _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "OrderItem";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Department";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Building";`); } diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_109_h2/modules/entities/script.sql b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_109_h2/modules/entities/script.sql index 1a0a71f14..da9ea1ac8 100644 --- a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_109_h2/modules/entities/script.sql +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_109_h2/modules/entities/script.sql @@ -5,16 +5,18 @@ DROP TABLE IF EXISTS "Employee"; DROP TABLE IF EXISTS "Workspace"; -DROP TABLE IF EXISTS "Building"; -DROP TABLE IF EXISTS "Department"; DROP TABLE IF EXISTS "OrderItem"; +DROP TABLE IF EXISTS "Department"; +DROP TABLE IF EXISTS "Building"; -CREATE TABLE "OrderItem" ( - "orderId" VARCHAR(191) NOT NULL, - "itemId" VARCHAR(191) NOT NULL, - "quantity" INT NOT NULL, - "notes" VARCHAR(191) NOT NULL, - PRIMARY KEY("orderId","itemId") +CREATE TABLE "Building" ( + "buildingCode" VARCHAR(191) NOT NULL, + "city" VARCHAR(191) NOT NULL, + "state" VARCHAR(191) NOT NULL, + "country" VARCHAR(191) NOT NULL, + "postalCode" VARCHAR(191) NOT NULL, + "type" VARCHAR(191) NOT NULL, + PRIMARY KEY("buildingCode") ); CREATE TABLE "Department" ( @@ -24,14 +26,12 @@ CREATE TABLE "Department" ( PRIMARY KEY("deptNo","deptName") ); -CREATE TABLE "Building" ( - "buildingCode" VARCHAR(191) NOT NULL, - "city" VARCHAR(191) NOT NULL, - "state" VARCHAR(191) NOT NULL, - "country" VARCHAR(191) NOT NULL, - "postalCode" VARCHAR(191) NOT NULL, - "type" VARCHAR(191) NOT NULL, - PRIMARY KEY("buildingCode") +CREATE TABLE "OrderItem" ( + "orderId" VARCHAR(191) NOT NULL, + "itemId" VARCHAR(191) NOT NULL, + "quantity" INT NOT NULL, + "notes" VARCHAR(191) NOT NULL, + PRIMARY KEY("orderId","itemId") ); CREATE TABLE "Workspace" ( diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_110_h2/modules/entities/script.sql b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_110_h2/modules/entities/script.sql index 97ab50cbe..7b20707b4 100644 --- a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_110_h2/modules/entities/script.sql +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_110_h2/modules/entities/script.sql @@ -5,14 +5,8 @@ DROP TABLE IF EXISTS "Workspace"; DROP TABLE IF EXISTS "Employee"; -DROP TABLE IF EXISTS "Building"; DROP TABLE IF EXISTS "Department"; - -CREATE TABLE "Department" ( - "deptNo" VARCHAR(191) NOT NULL, - "deptName" VARCHAR(191) NOT NULL, - PRIMARY KEY("deptNo") -); +DROP TABLE IF EXISTS "Building"; CREATE TABLE "Building" ( "buildingCode" VARCHAR(191) NOT NULL, @@ -23,6 +17,12 @@ CREATE TABLE "Building" ( PRIMARY KEY("buildingCode") ); +CREATE TABLE "Department" ( + "deptNo" VARCHAR(191) NOT NULL, + "deptName" VARCHAR(191) NOT NULL, + PRIMARY KEY("deptNo") +); + CREATE TABLE "Employee" ( "empNo" VARCHAR(191) NOT NULL, "firstName" VARCHAR(191) NOT NULL, diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_111_h2/modules/entities/script.sql b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_111_h2/modules/entities/script.sql index 213c40732..84b9d79f5 100644 --- a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_111_h2/modules/entities/script.sql +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_111_h2/modules/entities/script.sql @@ -3,8 +3,8 @@ -- This file is an auto-generated file by Ballerina persistence layer for model. -- Please verify the generated scripts and execute them against the target DB server. -DROP TABLE IF EXISTS "Follow"; DROP TABLE IF EXISTS "Post"; +DROP TABLE IF EXISTS "Follow"; DROP TABLE IF EXISTS "User"; CREATE TABLE "User" ( @@ -15,6 +15,16 @@ CREATE TABLE "User" ( PRIMARY KEY("id") ); +CREATE TABLE "Follow" ( + "id" INT NOT NULL, + "created_date" DATE NOT NULL, + "leaderId" INT UNIQUE NOT NULL, + FOREIGN KEY("leaderId") REFERENCES "User"("id"), + "followerId" INT UNIQUE NOT NULL, + FOREIGN KEY("followerId") REFERENCES "User"("id"), + PRIMARY KEY("id") +); + CREATE TABLE "Post" ( "id" INT NOT NULL, "description" VARCHAR(191) NOT NULL, @@ -26,14 +36,4 @@ CREATE TABLE "Post" ( PRIMARY KEY("id") ); -CREATE TABLE "Follow" ( - "id" INT NOT NULL, - "created_date" DATE NOT NULL, - "leaderId" INT UNIQUE NOT NULL, - FOREIGN KEY("leaderId") REFERENCES "User"("id"), - "followerId" INT UNIQUE NOT NULL, - FOREIGN KEY("followerId") REFERENCES "User"("id"), - PRIMARY KEY("id") -); - diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_112_h2/modules/entities/script.sql b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_112_h2/modules/entities/script.sql index 0be179b0c..1a19f8d32 100644 --- a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_112_h2/modules/entities/script.sql +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_112_h2/modules/entities/script.sql @@ -4,8 +4,8 @@ -- Please verify the generated scripts and execute them against the target DB server. DROP TABLE IF EXISTS "Comment"; -DROP TABLE IF EXISTS "Follow"; DROP TABLE IF EXISTS "Post"; +DROP TABLE IF EXISTS "Follow"; DROP TABLE IF EXISTS "User"; CREATE TABLE "User" ( @@ -16,6 +16,16 @@ CREATE TABLE "User" ( PRIMARY KEY("id") ); +CREATE TABLE "Follow" ( + "id" INT NOT NULL, + "timestamp" DATETIME NOT NULL, + "leaderId" INT NOT NULL, + FOREIGN KEY("leaderId") REFERENCES "User"("id"), + "followerId" INT NOT NULL, + FOREIGN KEY("followerId") REFERENCES "User"("id"), + PRIMARY KEY("id") +); + CREATE TABLE "Post" ( "id" INT NOT NULL, "description" VARCHAR(191) NOT NULL, @@ -27,16 +37,6 @@ CREATE TABLE "Post" ( PRIMARY KEY("id") ); -CREATE TABLE "Follow" ( - "id" INT NOT NULL, - "timestamp" DATETIME NOT NULL, - "leaderId" INT NOT NULL, - FOREIGN KEY("leaderId") REFERENCES "User"("id"), - "followerId" INT NOT NULL, - FOREIGN KEY("followerId") REFERENCES "User"("id"), - PRIMARY KEY("id") -); - CREATE TABLE "Comment" ( "id" INT NOT NULL, "comment" VARCHAR(191) NOT NULL, diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_113_schema/modules/entities/script.sql b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_113_schema/modules/entities/script.sql index b5b86cb84..9d37bde41 100644 --- a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_113_schema/modules/entities/script.sql +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_113_schema/modules/entities/script.sql @@ -4,17 +4,8 @@ -- Please verify the generated scripts and execute them against the target DB server. DROP TABLE IF EXISTS `appointment`; -DROP TABLE IF EXISTS `patients`; DROP TABLE IF EXISTS `Doctor`; - -CREATE TABLE `Doctor` ( - `id` INT NOT NULL, - `name` VARCHAR(191) NOT NULL, - `specialty` VARCHAR(20) NOT NULL, - `phone_number` VARCHAR(191) NOT NULL, - `salary` DECIMAL(10,2), - PRIMARY KEY(`id`) -); +DROP TABLE IF EXISTS `patients`; CREATE TABLE `patients` ( `IDP` INT AUTO_INCREMENT, @@ -26,6 +17,15 @@ CREATE TABLE `patients` ( PRIMARY KEY(`IDP`) ); +CREATE TABLE `Doctor` ( + `id` INT NOT NULL, + `name` VARCHAR(191) NOT NULL, + `specialty` VARCHAR(20) NOT NULL, + `phone_number` VARCHAR(191) NOT NULL, + `salary` DECIMAL(10,2), + PRIMARY KEY(`id`) +); + CREATE TABLE `appointment` ( `id` INT NOT NULL, `reason` VARCHAR(191) NOT NULL, diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_113_schema/modules/h2_entities/script.sql b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_113_schema/modules/h2_entities/script.sql index 4de0c692c..f4c97e5e5 100644 --- a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_113_schema/modules/h2_entities/script.sql +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_113_schema/modules/h2_entities/script.sql @@ -4,17 +4,8 @@ -- Please verify the generated scripts and execute them against the target DB server. DROP TABLE IF EXISTS "appointment"; -DROP TABLE IF EXISTS "patients"; DROP TABLE IF EXISTS "Doctor"; - -CREATE TABLE "Doctor" ( - "id" INT NOT NULL, - "name" VARCHAR(191) NOT NULL, - "specialty" VARCHAR(20) NOT NULL, - "phone_number" VARCHAR(191) NOT NULL, - "salary" DECIMAL(10,2), - PRIMARY KEY("id") -); +DROP TABLE IF EXISTS "patients"; CREATE TABLE "patients" ( "IDP" INT AUTO_INCREMENT, @@ -26,6 +17,15 @@ CREATE TABLE "patients" ( PRIMARY KEY("IDP") ); +CREATE TABLE "Doctor" ( + "id" INT NOT NULL, + "name" VARCHAR(191) NOT NULL, + "specialty" VARCHAR(20) NOT NULL, + "phone_number" VARCHAR(191) NOT NULL, + "salary" DECIMAL(10,2), + PRIMARY KEY("id") +); + CREATE TABLE "appointment" ( "id" INT NOT NULL, "reason" VARCHAR(191) NOT NULL, diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_113_schema/modules/mssql_entities/script.sql b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_113_schema/modules/mssql_entities/script.sql index 8dc637e7f..326b4f7f9 100644 --- a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_113_schema/modules/mssql_entities/script.sql +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_113_schema/modules/mssql_entities/script.sql @@ -4,17 +4,8 @@ -- Please verify the generated scripts and execute them against the target DB server. DROP TABLE IF EXISTS hospital.[appointment]; -DROP TABLE IF EXISTS [patients]; DROP TABLE IF EXISTS gmoa.[Doctor]; - -CREATE TABLE gmoa.[Doctor] ( - [id] INT NOT NULL, - [name] VARCHAR(191) NOT NULL, - [specialty] VARCHAR(20) NOT NULL, - [phone_number] VARCHAR(191) NOT NULL, - [salary] DECIMAL(10,2), - PRIMARY KEY([id]) -); +DROP TABLE IF EXISTS [patients]; CREATE TABLE [patients] ( [IDP] INT IDENTITY(1,1), @@ -26,6 +17,15 @@ CREATE TABLE [patients] ( PRIMARY KEY([IDP]) ); +CREATE TABLE gmoa.[Doctor] ( + [id] INT NOT NULL, + [name] VARCHAR(191) NOT NULL, + [specialty] VARCHAR(20) NOT NULL, + [phone_number] VARCHAR(191) NOT NULL, + [salary] DECIMAL(10,2), + PRIMARY KEY([id]) +); + CREATE TABLE hospital.[appointment] ( [id] INT NOT NULL, [reason] VARCHAR(191) NOT NULL, diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_113_schema/modules/postgresql_entities/script.sql b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_113_schema/modules/postgresql_entities/script.sql index 06123a16f..b714a884a 100644 --- a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_113_schema/modules/postgresql_entities/script.sql +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_113_schema/modules/postgresql_entities/script.sql @@ -4,17 +4,8 @@ -- Please verify the generated scripts and execute them against the target DB server. DROP TABLE IF EXISTS hospital."appointment"; -DROP TABLE IF EXISTS "patients"; DROP TABLE IF EXISTS gmoa."Doctor"; - -CREATE TABLE gmoa."Doctor" ( - "id" INT NOT NULL, - "name" VARCHAR(191) NOT NULL, - "specialty" VARCHAR(20) NOT NULL, - "phone_number" VARCHAR(191) NOT NULL, - "salary" DECIMAL(10,2), - PRIMARY KEY("id") -); +DROP TABLE IF EXISTS "patients"; CREATE TABLE "patients" ( "IDP" SERIAL, @@ -26,6 +17,15 @@ CREATE TABLE "patients" ( PRIMARY KEY("IDP") ); +CREATE TABLE gmoa."Doctor" ( + "id" INT NOT NULL, + "name" VARCHAR(191) NOT NULL, + "specialty" VARCHAR(20) NOT NULL, + "phone_number" VARCHAR(191) NOT NULL, + "salary" DECIMAL(10,2), + PRIMARY KEY("id") +); + CREATE TABLE hospital."appointment" ( "id" INT NOT NULL, "reason" VARCHAR(191) NOT NULL, diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_114/Ballerina.toml b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_114/Ballerina.toml new file mode 100644 index 000000000..528d79467 --- /dev/null +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_114/Ballerina.toml @@ -0,0 +1,15 @@ +[package] +org = "foo" +name = "tool_test_generate_114" +version = "0.1.0" +distribution = "2201.12.0" + +[build-options] +observabilityIncluded = true + +[[platform.java21.dependency]] +groupId = "io.ballerina.stdlib" +artifactId = "persist.sql-native" +version = "1.6.0" + + diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_114/Config.toml b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_114/Config.toml new file mode 100644 index 000000000..474ded95e --- /dev/null +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_114/Config.toml @@ -0,0 +1,27 @@ +[tool_test_generate_114.entities] +host = "localhost" +port = 3306 +user = "root" +password = "" +database = "" + +[tool_test_generate_114.mssql_entities] +host = "localhost" +port = 1433 +user = "sa" +password = "" +database = "" + +[tool_test_generate_114.h2_entities] +url = "" +user = "" +password = "" + +[tool_test_generate_114.postgresql_entities] +host = "localhost" +port = 5432 +user = "postgres" +password = "" +database = "" + + diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_114/main.bal b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_114/main.bal new file mode 100644 index 000000000..af2f50189 --- /dev/null +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_114/main.bal @@ -0,0 +1,21 @@ +// Copyright (c) 2025 WSO2 LLC. (http://www.wso2.com). +// +// WSO2 LLC. licenses this file to you under the Apache License, +// Version 2.0 (the "License"); you may not use this file except +// in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +import ballerina/io; + +public function main() { + io:println("Hello, World!"); +} diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_114/modules/entities/persist_client.bal b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_114/modules/entities/persist_client.bal new file mode 100644 index 000000000..81357ee3e --- /dev/null +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_114/modules/entities/persist_client.bal @@ -0,0 +1,473 @@ +// AUTO-GENERATED FILE. DO NOT MODIFY. + +// This file is an auto-generated file by Ballerina persistence layer for model. +// It should not be modified by hand. + +import ballerina/jballerina.java; +import ballerina/persist; +import ballerina/sql; +import ballerinax/mysql; +import ballerinax/mysql.driver as _; +import ballerinax/persist.sql as psql; + +const CODE_SYSTEM = "codesystems"; +const CONCEPT = "concepts"; +const VALUE_SET = "valuesets"; +const VALUE_SET_COMPOSE_INCLUDE = "valuesetcomposeincludes"; +const VALUE_SET_COMPOSE_INCLUDE_VALUE_SET = "valuesetcomposeincludevaluesets"; +const VALUE_SET_COMPOSE_INCLUDE_CONCEPT = "valuesetcomposeincludeconcepts"; + +public isolated client class Client { + *persist:AbstractPersistClient; + + private final mysql:Client dbClient; + + private final map persistClients; + + private final record {|psql:SQLMetadata...;|} & readonly metadata = { + [CODE_SYSTEM]: { + entityName: "CodeSystem", + tableName: "codesystems", + fieldMetadata: { + codeSystemId: {columnName: "codeSystemId", dbGenerated: true}, + id: {columnName: "id"}, + url: {columnName: "url"}, + 'version: {columnName: "version"}, + name: {columnName: "name"}, + title: {columnName: "title"}, + status: {columnName: "status"}, + date: {columnName: "date"}, + publisher: {columnName: "publisher"}, + codeSystem: {columnName: "codeSystem"}, + "concepts[].conceptId": {relation: {entityName: "concepts", refField: "conceptId"}}, + "concepts[].code": {relation: {entityName: "concepts", refField: "code"}}, + "concepts[].concept": {relation: {entityName: "concepts", refField: "concept"}}, + "concepts[].parentConceptId": {relation: {entityName: "concepts", refField: "parentConceptId"}}, + "concepts[].codesystemCodeSystemId": {relation: {entityName: "concepts", refField: "codesystemCodeSystemId"}} + }, + keyFields: ["codeSystemId"], + joinMetadata: {concepts: {entity: Concept, fieldName: "concepts", refTable: "concepts", refColumns: ["codesystemCodeSystemId"], joinColumns: ["codeSystemId"], 'type: psql:MANY_TO_ONE}} + }, + [CONCEPT]: { + entityName: "Concept", + tableName: "concepts", + fieldMetadata: { + conceptId: {columnName: "conceptId", dbGenerated: true}, + code: {columnName: "code"}, + concept: {columnName: "concept"}, + parentConceptId: {columnName: "parentConceptId"}, + codesystemCodeSystemId: {columnName: "codesystemCodeSystemId"}, + "codeSystem.codeSystemId": {relation: {entityName: "codeSystem", refField: "codeSystemId"}}, + "codeSystem.id": {relation: {entityName: "codeSystem", refField: "id"}}, + "codeSystem.url": {relation: {entityName: "codeSystem", refField: "url"}}, + "codeSystem.version": {relation: {entityName: "codeSystem", refField: "version", refColumn: "version"}}, + "codeSystem.name": {relation: {entityName: "codeSystem", refField: "name"}}, + "codeSystem.title": {relation: {entityName: "codeSystem", refField: "title"}}, + "codeSystem.status": {relation: {entityName: "codeSystem", refField: "status"}}, + "codeSystem.date": {relation: {entityName: "codeSystem", refField: "date"}}, + "codeSystem.publisher": {relation: {entityName: "codeSystem", refField: "publisher"}}, + "codeSystem.codeSystem": {relation: {entityName: "codeSystem", refField: "codeSystem"}}, + "valuesetcomposeincludeconcept[].valueSetComposeIncludeConceptId": {relation: {entityName: "valuesetcomposeincludeconcept", refField: "valueSetComposeIncludeConceptId"}}, + "valuesetcomposeincludeconcept[].valuesetcomposeValueSetComposeIncludeId": {relation: {entityName: "valuesetcomposeincludeconcept", refField: "valuesetcomposeValueSetComposeIncludeId"}}, + "valuesetcomposeincludeconcept[].conceptConceptId": {relation: {entityName: "valuesetcomposeincludeconcept", refField: "conceptConceptId"}} + }, + keyFields: ["conceptId"], + joinMetadata: { + codeSystem: {entity: CodeSystem, fieldName: "codeSystem", refTable: "codesystems", refColumns: ["codeSystemId"], joinColumns: ["codesystemCodeSystemId"], 'type: psql:ONE_TO_MANY}, + valuesetcomposeincludeconcept: {entity: ValueSetComposeIncludeConcept, fieldName: "valuesetcomposeincludeconcept", refTable: "valueset_compose_include_concepts", refColumns: ["conceptConceptId"], joinColumns: ["conceptId"], 'type: psql:MANY_TO_ONE} + } + }, + [VALUE_SET]: { + entityName: "ValueSet", + tableName: "valuesets", + fieldMetadata: { + valueSetId: {columnName: "valueSetId", dbGenerated: true}, + id: {columnName: "id"}, + url: {columnName: "url"}, + 'version: {columnName: "version"}, + name: {columnName: "name"}, + title: {columnName: "title"}, + status: {columnName: "status"}, + date: {columnName: "date"}, + publisher: {columnName: "publisher"}, + valueSet: {columnName: "valueSet"}, + "composes[].valueSetComposeIncludeId": {relation: {entityName: "composes", refField: "valueSetComposeIncludeId"}}, + "composes[].systemFlag": {relation: {entityName: "composes", refField: "systemFlag"}}, + "composes[].valueSetFlag": {relation: {entityName: "composes", refField: "valueSetFlag"}}, + "composes[].conceptFlag": {relation: {entityName: "composes", refField: "conceptFlag"}}, + "composes[].valuesetValueSetId": {relation: {entityName: "composes", refField: "valuesetValueSetId"}}, + "composes[].codeSystemId": {relation: {entityName: "composes", refField: "codeSystemId"}}, + "conceptsInValueSetConcepts[].valueSetComposeIncludeValueSetId": {relation: {entityName: "conceptsInValueSetConcepts", refField: "valueSetComposeIncludeValueSetId"}}, + "conceptsInValueSetConcepts[].valuesetcomposeValueSetComposeIncludeId": {relation: {entityName: "conceptsInValueSetConcepts", refField: "valuesetcomposeValueSetComposeIncludeId"}}, + "conceptsInValueSetConcepts[].valuesetValueSetId": {relation: {entityName: "conceptsInValueSetConcepts", refField: "valuesetValueSetId"}} + }, + keyFields: ["valueSetId"], + joinMetadata: { + composes: {entity: ValueSetComposeInclude, fieldName: "composes", refTable: "valueset_compose_includes", refColumns: ["valuesetValueSetId"], joinColumns: ["valueSetId"], 'type: psql:MANY_TO_ONE}, + conceptsInValueSetConcepts: {entity: ValueSetComposeIncludeValueSet, fieldName: "conceptsInValueSetConcepts", refTable: "valueset_compose_include_value_sets", refColumns: ["valuesetValueSetId"], joinColumns: ["valueSetId"], 'type: psql:MANY_TO_ONE} + } + }, + [VALUE_SET_COMPOSE_INCLUDE]: { + entityName: "ValueSetComposeInclude", + tableName: "valueset_compose_includes", + fieldMetadata: { + valueSetComposeIncludeId: {columnName: "valueSetComposeIncludeId", dbGenerated: true}, + systemFlag: {columnName: "systemFlag"}, + valueSetFlag: {columnName: "valueSetFlag"}, + conceptFlag: {columnName: "conceptFlag"}, + valuesetValueSetId: {columnName: "valuesetValueSetId"}, + codeSystemId: {columnName: "codeSystemId"}, + "valueSet.valueSetId": {relation: {entityName: "valueSet", refField: "valueSetId"}}, + "valueSet.id": {relation: {entityName: "valueSet", refField: "id"}}, + "valueSet.url": {relation: {entityName: "valueSet", refField: "url"}}, + "valueSet.version": {relation: {entityName: "valueSet", refField: "version", refColumn: "version"}}, + "valueSet.name": {relation: {entityName: "valueSet", refField: "name"}}, + "valueSet.title": {relation: {entityName: "valueSet", refField: "title"}}, + "valueSet.status": {relation: {entityName: "valueSet", refField: "status"}}, + "valueSet.date": {relation: {entityName: "valueSet", refField: "date"}}, + "valueSet.publisher": {relation: {entityName: "valueSet", refField: "publisher"}}, + "valueSet.valueSet": {relation: {entityName: "valueSet", refField: "valueSet"}}, + "valuesetcomposeincludevalueset[].valueSetComposeIncludeValueSetId": {relation: {entityName: "valuesetcomposeincludevalueset", refField: "valueSetComposeIncludeValueSetId"}}, + "valuesetcomposeincludevalueset[].valuesetcomposeValueSetComposeIncludeId": {relation: {entityName: "valuesetcomposeincludevalueset", refField: "valuesetcomposeValueSetComposeIncludeId"}}, + "valuesetcomposeincludevalueset[].valuesetValueSetId": {relation: {entityName: "valuesetcomposeincludevalueset", refField: "valuesetValueSetId"}}, + "valuesetcomposeincludeconcept[].valueSetComposeIncludeConceptId": {relation: {entityName: "valuesetcomposeincludeconcept", refField: "valueSetComposeIncludeConceptId"}}, + "valuesetcomposeincludeconcept[].valuesetcomposeValueSetComposeIncludeId": {relation: {entityName: "valuesetcomposeincludeconcept", refField: "valuesetcomposeValueSetComposeIncludeId"}}, + "valuesetcomposeincludeconcept[].conceptConceptId": {relation: {entityName: "valuesetcomposeincludeconcept", refField: "conceptConceptId"}} + }, + keyFields: ["valueSetComposeIncludeId"], + joinMetadata: { + valueSet: {entity: ValueSet, fieldName: "valueSet", refTable: "valuesets", refColumns: ["valueSetId"], joinColumns: ["valuesetValueSetId"], 'type: psql:ONE_TO_MANY}, + valuesetcomposeincludevalueset: {entity: ValueSetComposeIncludeValueSet, fieldName: "valuesetcomposeincludevalueset", refTable: "valueset_compose_include_value_sets", refColumns: ["valuesetcomposeValueSetComposeIncludeId"], joinColumns: ["valueSetComposeIncludeId"], 'type: psql:MANY_TO_ONE}, + valuesetcomposeincludeconcept: {entity: ValueSetComposeIncludeConcept, fieldName: "valuesetcomposeincludeconcept", refTable: "valueset_compose_include_concepts", refColumns: ["valuesetcomposeValueSetComposeIncludeId"], joinColumns: ["valueSetComposeIncludeId"], 'type: psql:MANY_TO_ONE} + } + }, + [VALUE_SET_COMPOSE_INCLUDE_VALUE_SET]: { + entityName: "ValueSetComposeIncludeValueSet", + tableName: "valueset_compose_include_value_sets", + fieldMetadata: { + valueSetComposeIncludeValueSetId: {columnName: "valueSetComposeIncludeValueSetId", dbGenerated: true}, + valuesetcomposeValueSetComposeIncludeId: {columnName: "valuesetcomposeValueSetComposeIncludeId"}, + valuesetValueSetId: {columnName: "valuesetValueSetId"}, + "valuesetCompose.valueSetComposeIncludeId": {relation: {entityName: "valuesetCompose", refField: "valueSetComposeIncludeId"}}, + "valuesetCompose.systemFlag": {relation: {entityName: "valuesetCompose", refField: "systemFlag"}}, + "valuesetCompose.valueSetFlag": {relation: {entityName: "valuesetCompose", refField: "valueSetFlag"}}, + "valuesetCompose.conceptFlag": {relation: {entityName: "valuesetCompose", refField: "conceptFlag"}}, + "valuesetCompose.valuesetValueSetId": {relation: {entityName: "valuesetCompose", refField: "valuesetValueSetId"}}, + "valuesetCompose.codeSystemId": {relation: {entityName: "valuesetCompose", refField: "codeSystemId"}}, + "valueset.valueSetId": {relation: {entityName: "valueset", refField: "valueSetId"}}, + "valueset.id": {relation: {entityName: "valueset", refField: "id"}}, + "valueset.url": {relation: {entityName: "valueset", refField: "url"}}, + "valueset.version": {relation: {entityName: "valueset", refField: "version", refColumn: "version"}}, + "valueset.name": {relation: {entityName: "valueset", refField: "name"}}, + "valueset.title": {relation: {entityName: "valueset", refField: "title"}}, + "valueset.status": {relation: {entityName: "valueset", refField: "status"}}, + "valueset.date": {relation: {entityName: "valueset", refField: "date"}}, + "valueset.publisher": {relation: {entityName: "valueset", refField: "publisher"}}, + "valueset.valueSet": {relation: {entityName: "valueset", refField: "valueSet"}} + }, + keyFields: ["valueSetComposeIncludeValueSetId"], + joinMetadata: { + valuesetCompose: {entity: ValueSetComposeInclude, fieldName: "valuesetCompose", refTable: "valueset_compose_includes", refColumns: ["valueSetComposeIncludeId"], joinColumns: ["valuesetcomposeValueSetComposeIncludeId"], 'type: psql:ONE_TO_MANY}, + valueset: {entity: ValueSet, fieldName: "valueset", refTable: "valuesets", refColumns: ["valueSetId"], joinColumns: ["valuesetValueSetId"], 'type: psql:ONE_TO_MANY} + } + }, + [VALUE_SET_COMPOSE_INCLUDE_CONCEPT]: { + entityName: "ValueSetComposeIncludeConcept", + tableName: "valueset_compose_include_concepts", + fieldMetadata: { + valueSetComposeIncludeConceptId: {columnName: "valueSetComposeIncludeConceptId", dbGenerated: true}, + valuesetcomposeValueSetComposeIncludeId: {columnName: "valuesetcomposeValueSetComposeIncludeId"}, + conceptConceptId: {columnName: "conceptConceptId"}, + "valuesetCompose.valueSetComposeIncludeId": {relation: {entityName: "valuesetCompose", refField: "valueSetComposeIncludeId"}}, + "valuesetCompose.systemFlag": {relation: {entityName: "valuesetCompose", refField: "systemFlag"}}, + "valuesetCompose.valueSetFlag": {relation: {entityName: "valuesetCompose", refField: "valueSetFlag"}}, + "valuesetCompose.conceptFlag": {relation: {entityName: "valuesetCompose", refField: "conceptFlag"}}, + "valuesetCompose.valuesetValueSetId": {relation: {entityName: "valuesetCompose", refField: "valuesetValueSetId"}}, + "valuesetCompose.codeSystemId": {relation: {entityName: "valuesetCompose", refField: "codeSystemId"}}, + "concept.conceptId": {relation: {entityName: "concept", refField: "conceptId"}}, + "concept.code": {relation: {entityName: "concept", refField: "code"}}, + "concept.concept": {relation: {entityName: "concept", refField: "concept"}}, + "concept.parentConceptId": {relation: {entityName: "concept", refField: "parentConceptId"}}, + "concept.codesystemCodeSystemId": {relation: {entityName: "concept", refField: "codesystemCodeSystemId"}} + }, + keyFields: ["valueSetComposeIncludeConceptId"], + joinMetadata: { + valuesetCompose: {entity: ValueSetComposeInclude, fieldName: "valuesetCompose", refTable: "valueset_compose_includes", refColumns: ["valueSetComposeIncludeId"], joinColumns: ["valuesetcomposeValueSetComposeIncludeId"], 'type: psql:ONE_TO_MANY}, + concept: {entity: Concept, fieldName: "concept", refTable: "concepts", refColumns: ["conceptId"], joinColumns: ["conceptConceptId"], 'type: psql:ONE_TO_MANY} + } + } + }; + + public isolated function init() returns persist:Error? { + mysql:Client|error dbClient = new (host = host, user = user, password = password, database = database, port = port, options = connectionOptions); + if dbClient is error { + return error(dbClient.message()); + } + self.dbClient = dbClient; + self.persistClients = { + [CODE_SYSTEM]: check new (dbClient, self.metadata.get(CODE_SYSTEM), psql:MYSQL_SPECIFICS), + [CONCEPT]: check new (dbClient, self.metadata.get(CONCEPT), psql:MYSQL_SPECIFICS), + [VALUE_SET]: check new (dbClient, self.metadata.get(VALUE_SET), psql:MYSQL_SPECIFICS), + [VALUE_SET_COMPOSE_INCLUDE]: check new (dbClient, self.metadata.get(VALUE_SET_COMPOSE_INCLUDE), psql:MYSQL_SPECIFICS), + [VALUE_SET_COMPOSE_INCLUDE_VALUE_SET]: check new (dbClient, self.metadata.get(VALUE_SET_COMPOSE_INCLUDE_VALUE_SET), psql:MYSQL_SPECIFICS), + [VALUE_SET_COMPOSE_INCLUDE_CONCEPT]: check new (dbClient, self.metadata.get(VALUE_SET_COMPOSE_INCLUDE_CONCEPT), psql:MYSQL_SPECIFICS) + }; + } + + isolated resource function get codesystems(CodeSystemTargetType targetType = <>, sql:ParameterizedQuery whereClause = ``, sql:ParameterizedQuery orderByClause = ``, sql:ParameterizedQuery limitClause = ``, sql:ParameterizedQuery groupByClause = ``) returns stream = @java:Method { + 'class: "io.ballerina.stdlib.persist.sql.datastore.MySQLProcessor", + name: "query" + } external; + + isolated resource function get codesystems/[int codeSystemId](CodeSystemTargetType targetType = <>) returns targetType|persist:Error = @java:Method { + 'class: "io.ballerina.stdlib.persist.sql.datastore.MySQLProcessor", + name: "queryOne" + } external; + + isolated resource function post codesystems(CodeSystemInsert[] data) returns int[]|persist:Error { + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(CODE_SYSTEM); + } + sql:ExecutionResult[] result = check sqlClient.runBatchInsertQuery(data); + return from sql:ExecutionResult inserted in result + where inserted.lastInsertId != () + select inserted.lastInsertId; + } + + isolated resource function put codesystems/[int codeSystemId](CodeSystemUpdate value) returns CodeSystem|persist:Error { + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(CODE_SYSTEM); + } + _ = check sqlClient.runUpdateQuery(codeSystemId, value); + return self->/codesystems/[codeSystemId].get(); + } + + isolated resource function delete codesystems/[int codeSystemId]() returns CodeSystem|persist:Error { + CodeSystem result = check self->/codesystems/[codeSystemId].get(); + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(CODE_SYSTEM); + } + _ = check sqlClient.runDeleteQuery(codeSystemId); + return result; + } + + isolated resource function get concepts(ConceptTargetType targetType = <>, sql:ParameterizedQuery whereClause = ``, sql:ParameterizedQuery orderByClause = ``, sql:ParameterizedQuery limitClause = ``, sql:ParameterizedQuery groupByClause = ``) returns stream = @java:Method { + 'class: "io.ballerina.stdlib.persist.sql.datastore.MySQLProcessor", + name: "query" + } external; + + isolated resource function get concepts/[int conceptId](ConceptTargetType targetType = <>) returns targetType|persist:Error = @java:Method { + 'class: "io.ballerina.stdlib.persist.sql.datastore.MySQLProcessor", + name: "queryOne" + } external; + + isolated resource function post concepts(ConceptInsert[] data) returns int[]|persist:Error { + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(CONCEPT); + } + sql:ExecutionResult[] result = check sqlClient.runBatchInsertQuery(data); + return from sql:ExecutionResult inserted in result + where inserted.lastInsertId != () + select inserted.lastInsertId; + } + + isolated resource function put concepts/[int conceptId](ConceptUpdate value) returns Concept|persist:Error { + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(CONCEPT); + } + _ = check sqlClient.runUpdateQuery(conceptId, value); + return self->/concepts/[conceptId].get(); + } + + isolated resource function delete concepts/[int conceptId]() returns Concept|persist:Error { + Concept result = check self->/concepts/[conceptId].get(); + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(CONCEPT); + } + _ = check sqlClient.runDeleteQuery(conceptId); + return result; + } + + isolated resource function get valuesets(ValueSetTargetType targetType = <>, sql:ParameterizedQuery whereClause = ``, sql:ParameterizedQuery orderByClause = ``, sql:ParameterizedQuery limitClause = ``, sql:ParameterizedQuery groupByClause = ``) returns stream = @java:Method { + 'class: "io.ballerina.stdlib.persist.sql.datastore.MySQLProcessor", + name: "query" + } external; + + isolated resource function get valuesets/[int valueSetId](ValueSetTargetType targetType = <>) returns targetType|persist:Error = @java:Method { + 'class: "io.ballerina.stdlib.persist.sql.datastore.MySQLProcessor", + name: "queryOne" + } external; + + isolated resource function post valuesets(ValueSetInsert[] data) returns int[]|persist:Error { + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(VALUE_SET); + } + sql:ExecutionResult[] result = check sqlClient.runBatchInsertQuery(data); + return from sql:ExecutionResult inserted in result + where inserted.lastInsertId != () + select inserted.lastInsertId; + } + + isolated resource function put valuesets/[int valueSetId](ValueSetUpdate value) returns ValueSet|persist:Error { + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(VALUE_SET); + } + _ = check sqlClient.runUpdateQuery(valueSetId, value); + return self->/valuesets/[valueSetId].get(); + } + + isolated resource function delete valuesets/[int valueSetId]() returns ValueSet|persist:Error { + ValueSet result = check self->/valuesets/[valueSetId].get(); + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(VALUE_SET); + } + _ = check sqlClient.runDeleteQuery(valueSetId); + return result; + } + + isolated resource function get valuesetcomposeincludes(ValueSetComposeIncludeTargetType targetType = <>, sql:ParameterizedQuery whereClause = ``, sql:ParameterizedQuery orderByClause = ``, sql:ParameterizedQuery limitClause = ``, sql:ParameterizedQuery groupByClause = ``) returns stream = @java:Method { + 'class: "io.ballerina.stdlib.persist.sql.datastore.MySQLProcessor", + name: "query" + } external; + + isolated resource function get valuesetcomposeincludes/[int valueSetComposeIncludeId](ValueSetComposeIncludeTargetType targetType = <>) returns targetType|persist:Error = @java:Method { + 'class: "io.ballerina.stdlib.persist.sql.datastore.MySQLProcessor", + name: "queryOne" + } external; + + isolated resource function post valuesetcomposeincludes(ValueSetComposeIncludeInsert[] data) returns int[]|persist:Error { + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(VALUE_SET_COMPOSE_INCLUDE); + } + sql:ExecutionResult[] result = check sqlClient.runBatchInsertQuery(data); + return from sql:ExecutionResult inserted in result + where inserted.lastInsertId != () + select inserted.lastInsertId; + } + + isolated resource function put valuesetcomposeincludes/[int valueSetComposeIncludeId](ValueSetComposeIncludeUpdate value) returns ValueSetComposeInclude|persist:Error { + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(VALUE_SET_COMPOSE_INCLUDE); + } + _ = check sqlClient.runUpdateQuery(valueSetComposeIncludeId, value); + return self->/valuesetcomposeincludes/[valueSetComposeIncludeId].get(); + } + + isolated resource function delete valuesetcomposeincludes/[int valueSetComposeIncludeId]() returns ValueSetComposeInclude|persist:Error { + ValueSetComposeInclude result = check self->/valuesetcomposeincludes/[valueSetComposeIncludeId].get(); + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(VALUE_SET_COMPOSE_INCLUDE); + } + _ = check sqlClient.runDeleteQuery(valueSetComposeIncludeId); + return result; + } + + isolated resource function get valuesetcomposeincludevaluesets(ValueSetComposeIncludeValueSetTargetType targetType = <>, sql:ParameterizedQuery whereClause = ``, sql:ParameterizedQuery orderByClause = ``, sql:ParameterizedQuery limitClause = ``, sql:ParameterizedQuery groupByClause = ``) returns stream = @java:Method { + 'class: "io.ballerina.stdlib.persist.sql.datastore.MySQLProcessor", + name: "query" + } external; + + isolated resource function get valuesetcomposeincludevaluesets/[int valueSetComposeIncludeValueSetId](ValueSetComposeIncludeValueSetTargetType targetType = <>) returns targetType|persist:Error = @java:Method { + 'class: "io.ballerina.stdlib.persist.sql.datastore.MySQLProcessor", + name: "queryOne" + } external; + + isolated resource function post valuesetcomposeincludevaluesets(ValueSetComposeIncludeValueSetInsert[] data) returns int[]|persist:Error { + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(VALUE_SET_COMPOSE_INCLUDE_VALUE_SET); + } + sql:ExecutionResult[] result = check sqlClient.runBatchInsertQuery(data); + return from sql:ExecutionResult inserted in result + where inserted.lastInsertId != () + select inserted.lastInsertId; + } + + isolated resource function put valuesetcomposeincludevaluesets/[int valueSetComposeIncludeValueSetId](ValueSetComposeIncludeValueSetUpdate value) returns ValueSetComposeIncludeValueSet|persist:Error { + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(VALUE_SET_COMPOSE_INCLUDE_VALUE_SET); + } + _ = check sqlClient.runUpdateQuery(valueSetComposeIncludeValueSetId, value); + return self->/valuesetcomposeincludevaluesets/[valueSetComposeIncludeValueSetId].get(); + } + + isolated resource function delete valuesetcomposeincludevaluesets/[int valueSetComposeIncludeValueSetId]() returns ValueSetComposeIncludeValueSet|persist:Error { + ValueSetComposeIncludeValueSet result = check self->/valuesetcomposeincludevaluesets/[valueSetComposeIncludeValueSetId].get(); + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(VALUE_SET_COMPOSE_INCLUDE_VALUE_SET); + } + _ = check sqlClient.runDeleteQuery(valueSetComposeIncludeValueSetId); + return result; + } + + isolated resource function get valuesetcomposeincludeconcepts(ValueSetComposeIncludeConceptTargetType targetType = <>, sql:ParameterizedQuery whereClause = ``, sql:ParameterizedQuery orderByClause = ``, sql:ParameterizedQuery limitClause = ``, sql:ParameterizedQuery groupByClause = ``) returns stream = @java:Method { + 'class: "io.ballerina.stdlib.persist.sql.datastore.MySQLProcessor", + name: "query" + } external; + + isolated resource function get valuesetcomposeincludeconcepts/[int valueSetComposeIncludeConceptId](ValueSetComposeIncludeConceptTargetType targetType = <>) returns targetType|persist:Error = @java:Method { + 'class: "io.ballerina.stdlib.persist.sql.datastore.MySQLProcessor", + name: "queryOne" + } external; + + isolated resource function post valuesetcomposeincludeconcepts(ValueSetComposeIncludeConceptInsert[] data) returns int[]|persist:Error { + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(VALUE_SET_COMPOSE_INCLUDE_CONCEPT); + } + sql:ExecutionResult[] result = check sqlClient.runBatchInsertQuery(data); + return from sql:ExecutionResult inserted in result + where inserted.lastInsertId != () + select inserted.lastInsertId; + } + + isolated resource function put valuesetcomposeincludeconcepts/[int valueSetComposeIncludeConceptId](ValueSetComposeIncludeConceptUpdate value) returns ValueSetComposeIncludeConcept|persist:Error { + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(VALUE_SET_COMPOSE_INCLUDE_CONCEPT); + } + _ = check sqlClient.runUpdateQuery(valueSetComposeIncludeConceptId, value); + return self->/valuesetcomposeincludeconcepts/[valueSetComposeIncludeConceptId].get(); + } + + isolated resource function delete valuesetcomposeincludeconcepts/[int valueSetComposeIncludeConceptId]() returns ValueSetComposeIncludeConcept|persist:Error { + ValueSetComposeIncludeConcept result = check self->/valuesetcomposeincludeconcepts/[valueSetComposeIncludeConceptId].get(); + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(VALUE_SET_COMPOSE_INCLUDE_CONCEPT); + } + _ = check sqlClient.runDeleteQuery(valueSetComposeIncludeConceptId); + return result; + } + + remote isolated function queryNativeSQL(sql:ParameterizedQuery sqlQuery, typedesc rowType = <>) returns stream = @java:Method { + 'class: "io.ballerina.stdlib.persist.sql.datastore.MySQLProcessor" + } external; + + remote isolated function executeNativeSQL(sql:ParameterizedQuery sqlQuery) returns psql:ExecutionResult|persist:Error = @java:Method { + 'class: "io.ballerina.stdlib.persist.sql.datastore.MySQLProcessor" + } external; + + public isolated function close() returns persist:Error? { + error? result = self.dbClient.close(); + if result is error { + return error(result.message()); + } + return result; + } +} + diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_114/modules/entities/persist_db_config.bal b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_114/modules/entities/persist_db_config.bal new file mode 100644 index 000000000..05bde0c27 --- /dev/null +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_114/modules/entities/persist_db_config.bal @@ -0,0 +1,14 @@ +// AUTO-GENERATED FILE. DO NOT MODIFY. + +// This file is an auto-generated file by Ballerina persistence layer. +// It should not be modified by hand. + +import ballerinax/mysql; + +configurable int port = ?; +configurable string host = ?; +configurable string user = ?; +configurable string database = ?; +configurable string password = ?; +configurable mysql:Options & readonly connectionOptions = {}; + diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_114/modules/entities/persist_types.bal b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_114/modules/entities/persist_types.bal new file mode 100644 index 000000000..3a8fc2797 --- /dev/null +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_114/modules/entities/persist_types.bal @@ -0,0 +1,265 @@ +// AUTO-GENERATED FILE. DO NOT MODIFY. + +// This file is an auto-generated file by Ballerina persistence layer for model. +// It should not be modified by hand. + +public type CodeSystem record {| + readonly int codeSystemId; + string id; + string url; + string 'version; + string name; + string title; + string status; + string date; + string publisher; + byte[] codeSystem; + +|}; + +public type CodeSystemOptionalized record {| + int codeSystemId?; + string id?; + string url?; + string 'version?; + string name?; + string title?; + string status?; + string date?; + string publisher?; + byte[] codeSystem?; +|}; + +public type CodeSystemWithRelations record {| + *CodeSystemOptionalized; + ConceptOptionalized[] concepts?; +|}; + +public type CodeSystemTargetType typedesc; + +public type CodeSystemInsert record {| + string id; + string url; + string 'version; + string name; + string title; + string status; + string date; + string publisher; + byte[] codeSystem; +|}; + +public type CodeSystemUpdate record {| + string id?; + string url?; + string 'version?; + string name?; + string title?; + string status?; + string date?; + string publisher?; + byte[] codeSystem?; +|}; + +public type Concept record {| + readonly int conceptId; + string code; + byte[] concept; + int? parentConceptId; + int codesystemCodeSystemId; + +|}; + +public type ConceptOptionalized record {| + int conceptId?; + string code?; + byte[] concept?; + int? parentConceptId?; + int codesystemCodeSystemId?; +|}; + +public type ConceptWithRelations record {| + *ConceptOptionalized; + CodeSystemOptionalized codeSystem?; + ValueSetComposeIncludeConceptOptionalized[] valuesetcomposeincludeconcept?; +|}; + +public type ConceptTargetType typedesc; + +public type ConceptInsert record {| + string code; + byte[] concept; + int? parentConceptId; + int codesystemCodeSystemId; +|}; + +public type ConceptUpdate record {| + string code?; + byte[] concept?; + int? parentConceptId?; + int codesystemCodeSystemId?; +|}; + +public type ValueSet record {| + readonly int valueSetId; + string id; + string url; + string 'version; + string name; + string title; + string status; + string date; + string publisher; + byte[] valueSet; + +|}; + +public type ValueSetOptionalized record {| + int valueSetId?; + string id?; + string url?; + string 'version?; + string name?; + string title?; + string status?; + string date?; + string publisher?; + byte[] valueSet?; +|}; + +public type ValueSetWithRelations record {| + *ValueSetOptionalized; + ValueSetComposeIncludeOptionalized[] composes?; + ValueSetComposeIncludeValueSetOptionalized[] conceptsInValueSetConcepts?; +|}; + +public type ValueSetTargetType typedesc; + +public type ValueSetInsert record {| + string id; + string url; + string 'version; + string name; + string title; + string status; + string date; + string publisher; + byte[] valueSet; +|}; + +public type ValueSetUpdate record {| + string id?; + string url?; + string 'version?; + string name?; + string title?; + string status?; + string date?; + string publisher?; + byte[] valueSet?; +|}; + +public type ValueSetComposeInclude record {| + readonly int valueSetComposeIncludeId; + boolean systemFlag; + boolean valueSetFlag; + boolean conceptFlag; + int valuesetValueSetId; + + int? codeSystemId; +|}; + +public type ValueSetComposeIncludeOptionalized record {| + int valueSetComposeIncludeId?; + boolean systemFlag?; + boolean valueSetFlag?; + boolean conceptFlag?; + int valuesetValueSetId?; + int? codeSystemId?; +|}; + +public type ValueSetComposeIncludeWithRelations record {| + *ValueSetComposeIncludeOptionalized; + ValueSetOptionalized valueSet?; + ValueSetComposeIncludeValueSetOptionalized[] valuesetcomposeincludevalueset?; + ValueSetComposeIncludeConceptOptionalized[] valuesetcomposeincludeconcept?; +|}; + +public type ValueSetComposeIncludeTargetType typedesc; + +public type ValueSetComposeIncludeInsert record {| + boolean systemFlag; + boolean valueSetFlag; + boolean conceptFlag; + int valuesetValueSetId; + int? codeSystemId; +|}; + +public type ValueSetComposeIncludeUpdate record {| + boolean systemFlag?; + boolean valueSetFlag?; + boolean conceptFlag?; + int valuesetValueSetId?; + int? codeSystemId?; +|}; + +public type ValueSetComposeIncludeValueSet record {| + readonly int valueSetComposeIncludeValueSetId; + int valuesetcomposeValueSetComposeIncludeId; + int valuesetValueSetId; +|}; + +public type ValueSetComposeIncludeValueSetOptionalized record {| + int valueSetComposeIncludeValueSetId?; + int valuesetcomposeValueSetComposeIncludeId?; + int valuesetValueSetId?; +|}; + +public type ValueSetComposeIncludeValueSetWithRelations record {| + *ValueSetComposeIncludeValueSetOptionalized; + ValueSetComposeIncludeOptionalized valuesetCompose?; + ValueSetOptionalized valueset?; +|}; + +public type ValueSetComposeIncludeValueSetTargetType typedesc; + +public type ValueSetComposeIncludeValueSetInsert record {| + int valuesetcomposeValueSetComposeIncludeId; + int valuesetValueSetId; +|}; + +public type ValueSetComposeIncludeValueSetUpdate record {| + int valuesetcomposeValueSetComposeIncludeId?; + int valuesetValueSetId?; +|}; + +public type ValueSetComposeIncludeConcept record {| + readonly int valueSetComposeIncludeConceptId; + int valuesetcomposeValueSetComposeIncludeId; + int conceptConceptId; +|}; + +public type ValueSetComposeIncludeConceptOptionalized record {| + int valueSetComposeIncludeConceptId?; + int valuesetcomposeValueSetComposeIncludeId?; + int conceptConceptId?; +|}; + +public type ValueSetComposeIncludeConceptWithRelations record {| + *ValueSetComposeIncludeConceptOptionalized; + ValueSetComposeIncludeOptionalized valuesetCompose?; + ConceptOptionalized concept?; +|}; + +public type ValueSetComposeIncludeConceptTargetType typedesc; + +public type ValueSetComposeIncludeConceptInsert record {| + int valuesetcomposeValueSetComposeIncludeId; + int conceptConceptId; +|}; + +public type ValueSetComposeIncludeConceptUpdate record {| + int valuesetcomposeValueSetComposeIncludeId?; + int conceptConceptId?; +|}; + diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_114/modules/entities/script.sql b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_114/modules/entities/script.sql new file mode 100644 index 000000000..d5d0dd894 --- /dev/null +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_114/modules/entities/script.sql @@ -0,0 +1,80 @@ +-- AUTO-GENERATED FILE. + +-- This file is an auto-generated file by Ballerina persistence layer for model. +-- Please verify the generated scripts and execute them against the target DB server. + +DROP TABLE IF EXISTS `valueset_compose_include_concepts`; +DROP TABLE IF EXISTS `valueset_compose_include_value_sets`; +DROP TABLE IF EXISTS `concepts`; +DROP TABLE IF EXISTS `valueset_compose_includes`; +DROP TABLE IF EXISTS `codesystems`; +DROP TABLE IF EXISTS `valuesets`; + +CREATE TABLE `valuesets` ( + `valueSetId` INT AUTO_INCREMENT, + `id` VARCHAR(191) NOT NULL, + `url` VARCHAR(191) NOT NULL, + `version` VARCHAR(191) NOT NULL, + `name` VARCHAR(191) NOT NULL, + `title` VARCHAR(191) NOT NULL, + `status` VARCHAR(191) NOT NULL, + `date` VARCHAR(191) NOT NULL, + `publisher` VARCHAR(191) NOT NULL, + `valueSet` LONGBLOB NOT NULL, + PRIMARY KEY(`valueSetId`) +); + +CREATE TABLE `codesystems` ( + `codeSystemId` INT AUTO_INCREMENT, + `id` VARCHAR(191) NOT NULL, + `url` VARCHAR(191) NOT NULL, + `version` VARCHAR(191) NOT NULL, + `name` VARCHAR(191) NOT NULL, + `title` VARCHAR(191) NOT NULL, + `status` VARCHAR(191) NOT NULL, + `date` VARCHAR(191) NOT NULL, + `publisher` VARCHAR(191) NOT NULL, + `codeSystem` LONGBLOB NOT NULL, + PRIMARY KEY(`codeSystemId`) +); + +CREATE TABLE `valueset_compose_includes` ( + `valueSetComposeIncludeId` INT AUTO_INCREMENT, + `systemFlag` BOOLEAN NOT NULL, + `valueSetFlag` BOOLEAN NOT NULL, + `conceptFlag` BOOLEAN NOT NULL, + `codeSystemId` INT, + `valuesetValueSetId` INT NOT NULL, + FOREIGN KEY(`valuesetValueSetId`) REFERENCES `valuesets`(`valueSetId`), + PRIMARY KEY(`valueSetComposeIncludeId`) +); + +CREATE TABLE `concepts` ( + `conceptId` INT AUTO_INCREMENT, + `code` VARCHAR(191) NOT NULL, + `concept` LONGBLOB NOT NULL, + `parentConceptId` INT, + `codesystemCodeSystemId` INT NOT NULL, + FOREIGN KEY(`codesystemCodeSystemId`) REFERENCES `codesystems`(`codeSystemId`), + PRIMARY KEY(`conceptId`) +); + +CREATE TABLE `valueset_compose_include_value_sets` ( + `valueSetComposeIncludeValueSetId` INT AUTO_INCREMENT, + `valuesetcomposeValueSetComposeIncludeId` INT NOT NULL, + FOREIGN KEY(`valuesetcomposeValueSetComposeIncludeId`) REFERENCES `valueset_compose_includes`(`valueSetComposeIncludeId`), + `valuesetValueSetId` INT NOT NULL, + FOREIGN KEY(`valuesetValueSetId`) REFERENCES `valuesets`(`valueSetId`), + PRIMARY KEY(`valueSetComposeIncludeValueSetId`) +); + +CREATE TABLE `valueset_compose_include_concepts` ( + `valueSetComposeIncludeConceptId` INT AUTO_INCREMENT, + `valuesetcomposeValueSetComposeIncludeId` INT NOT NULL, + FOREIGN KEY(`valuesetcomposeValueSetComposeIncludeId`) REFERENCES `valueset_compose_includes`(`valueSetComposeIncludeId`), + `conceptConceptId` INT NOT NULL, + FOREIGN KEY(`conceptConceptId`) REFERENCES `concepts`(`conceptId`), + PRIMARY KEY(`valueSetComposeIncludeConceptId`) +); + + diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_114/modules/h2_entities/persist_client.bal b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_114/modules/h2_entities/persist_client.bal new file mode 100644 index 000000000..db61bca3a --- /dev/null +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_114/modules/h2_entities/persist_client.bal @@ -0,0 +1,473 @@ +// AUTO-GENERATED FILE. DO NOT MODIFY. + +// This file is an auto-generated file by Ballerina persistence layer for model. +// It should not be modified by hand. + +import ballerina/jballerina.java; +import ballerina/persist; +import ballerina/sql; +import ballerinax/h2.driver as _; +import ballerinax/java.jdbc; +import ballerinax/persist.sql as psql; + +const CODE_SYSTEM = "codesystems"; +const CONCEPT = "concepts"; +const VALUE_SET = "valuesets"; +const VALUE_SET_COMPOSE_INCLUDE = "valuesetcomposeincludes"; +const VALUE_SET_COMPOSE_INCLUDE_VALUE_SET = "valuesetcomposeincludevaluesets"; +const VALUE_SET_COMPOSE_INCLUDE_CONCEPT = "valuesetcomposeincludeconcepts"; + +public isolated client class Client { + *persist:AbstractPersistClient; + + private final jdbc:Client dbClient; + + private final map persistClients; + + private final record {|psql:SQLMetadata...;|} & readonly metadata = { + [CODE_SYSTEM]: { + entityName: "CodeSystem", + tableName: "codesystems", + fieldMetadata: { + codeSystemId: {columnName: "codeSystemId", dbGenerated: true}, + id: {columnName: "id"}, + url: {columnName: "url"}, + 'version: {columnName: "version"}, + name: {columnName: "name"}, + title: {columnName: "title"}, + status: {columnName: "status"}, + date: {columnName: "date"}, + publisher: {columnName: "publisher"}, + codeSystem: {columnName: "codeSystem"}, + "concepts[].conceptId": {relation: {entityName: "concepts", refField: "conceptId"}}, + "concepts[].code": {relation: {entityName: "concepts", refField: "code"}}, + "concepts[].concept": {relation: {entityName: "concepts", refField: "concept"}}, + "concepts[].parentConceptId": {relation: {entityName: "concepts", refField: "parentConceptId"}}, + "concepts[].codesystemCodeSystemId": {relation: {entityName: "concepts", refField: "codesystemCodeSystemId"}} + }, + keyFields: ["codeSystemId"], + joinMetadata: {concepts: {entity: Concept, fieldName: "concepts", refTable: "concepts", refColumns: ["codesystemCodeSystemId"], joinColumns: ["codeSystemId"], 'type: psql:MANY_TO_ONE}} + }, + [CONCEPT]: { + entityName: "Concept", + tableName: "concepts", + fieldMetadata: { + conceptId: {columnName: "conceptId", dbGenerated: true}, + code: {columnName: "code"}, + concept: {columnName: "concept"}, + parentConceptId: {columnName: "parentConceptId"}, + codesystemCodeSystemId: {columnName: "codesystemCodeSystemId"}, + "codeSystem.codeSystemId": {relation: {entityName: "codeSystem", refField: "codeSystemId"}}, + "codeSystem.id": {relation: {entityName: "codeSystem", refField: "id"}}, + "codeSystem.url": {relation: {entityName: "codeSystem", refField: "url"}}, + "codeSystem.version": {relation: {entityName: "codeSystem", refField: "version", refColumn: "version"}}, + "codeSystem.name": {relation: {entityName: "codeSystem", refField: "name"}}, + "codeSystem.title": {relation: {entityName: "codeSystem", refField: "title"}}, + "codeSystem.status": {relation: {entityName: "codeSystem", refField: "status"}}, + "codeSystem.date": {relation: {entityName: "codeSystem", refField: "date"}}, + "codeSystem.publisher": {relation: {entityName: "codeSystem", refField: "publisher"}}, + "codeSystem.codeSystem": {relation: {entityName: "codeSystem", refField: "codeSystem"}}, + "valuesetcomposeincludeconcept[].valueSetComposeIncludeConceptId": {relation: {entityName: "valuesetcomposeincludeconcept", refField: "valueSetComposeIncludeConceptId"}}, + "valuesetcomposeincludeconcept[].valuesetcomposeValueSetComposeIncludeId": {relation: {entityName: "valuesetcomposeincludeconcept", refField: "valuesetcomposeValueSetComposeIncludeId"}}, + "valuesetcomposeincludeconcept[].conceptConceptId": {relation: {entityName: "valuesetcomposeincludeconcept", refField: "conceptConceptId"}} + }, + keyFields: ["conceptId"], + joinMetadata: { + codeSystem: {entity: CodeSystem, fieldName: "codeSystem", refTable: "codesystems", refColumns: ["codeSystemId"], joinColumns: ["codesystemCodeSystemId"], 'type: psql:ONE_TO_MANY}, + valuesetcomposeincludeconcept: {entity: ValueSetComposeIncludeConcept, fieldName: "valuesetcomposeincludeconcept", refTable: "valueset_compose_include_concepts", refColumns: ["conceptConceptId"], joinColumns: ["conceptId"], 'type: psql:MANY_TO_ONE} + } + }, + [VALUE_SET]: { + entityName: "ValueSet", + tableName: "valuesets", + fieldMetadata: { + valueSetId: {columnName: "valueSetId", dbGenerated: true}, + id: {columnName: "id"}, + url: {columnName: "url"}, + 'version: {columnName: "version"}, + name: {columnName: "name"}, + title: {columnName: "title"}, + status: {columnName: "status"}, + date: {columnName: "date"}, + publisher: {columnName: "publisher"}, + valueSet: {columnName: "valueSet"}, + "composes[].valueSetComposeIncludeId": {relation: {entityName: "composes", refField: "valueSetComposeIncludeId"}}, + "composes[].systemFlag": {relation: {entityName: "composes", refField: "systemFlag"}}, + "composes[].valueSetFlag": {relation: {entityName: "composes", refField: "valueSetFlag"}}, + "composes[].conceptFlag": {relation: {entityName: "composes", refField: "conceptFlag"}}, + "composes[].valuesetValueSetId": {relation: {entityName: "composes", refField: "valuesetValueSetId"}}, + "composes[].codeSystemId": {relation: {entityName: "composes", refField: "codeSystemId"}}, + "conceptsInValueSetConcepts[].valueSetComposeIncludeValueSetId": {relation: {entityName: "conceptsInValueSetConcepts", refField: "valueSetComposeIncludeValueSetId"}}, + "conceptsInValueSetConcepts[].valuesetcomposeValueSetComposeIncludeId": {relation: {entityName: "conceptsInValueSetConcepts", refField: "valuesetcomposeValueSetComposeIncludeId"}}, + "conceptsInValueSetConcepts[].valuesetValueSetId": {relation: {entityName: "conceptsInValueSetConcepts", refField: "valuesetValueSetId"}} + }, + keyFields: ["valueSetId"], + joinMetadata: { + composes: {entity: ValueSetComposeInclude, fieldName: "composes", refTable: "valueset_compose_includes", refColumns: ["valuesetValueSetId"], joinColumns: ["valueSetId"], 'type: psql:MANY_TO_ONE}, + conceptsInValueSetConcepts: {entity: ValueSetComposeIncludeValueSet, fieldName: "conceptsInValueSetConcepts", refTable: "valueset_compose_include_value_sets", refColumns: ["valuesetValueSetId"], joinColumns: ["valueSetId"], 'type: psql:MANY_TO_ONE} + } + }, + [VALUE_SET_COMPOSE_INCLUDE]: { + entityName: "ValueSetComposeInclude", + tableName: "valueset_compose_includes", + fieldMetadata: { + valueSetComposeIncludeId: {columnName: "valueSetComposeIncludeId", dbGenerated: true}, + systemFlag: {columnName: "systemFlag"}, + valueSetFlag: {columnName: "valueSetFlag"}, + conceptFlag: {columnName: "conceptFlag"}, + valuesetValueSetId: {columnName: "valuesetValueSetId"}, + codeSystemId: {columnName: "codeSystemId"}, + "valueSet.valueSetId": {relation: {entityName: "valueSet", refField: "valueSetId"}}, + "valueSet.id": {relation: {entityName: "valueSet", refField: "id"}}, + "valueSet.url": {relation: {entityName: "valueSet", refField: "url"}}, + "valueSet.version": {relation: {entityName: "valueSet", refField: "version", refColumn: "version"}}, + "valueSet.name": {relation: {entityName: "valueSet", refField: "name"}}, + "valueSet.title": {relation: {entityName: "valueSet", refField: "title"}}, + "valueSet.status": {relation: {entityName: "valueSet", refField: "status"}}, + "valueSet.date": {relation: {entityName: "valueSet", refField: "date"}}, + "valueSet.publisher": {relation: {entityName: "valueSet", refField: "publisher"}}, + "valueSet.valueSet": {relation: {entityName: "valueSet", refField: "valueSet"}}, + "valuesetcomposeincludevalueset[].valueSetComposeIncludeValueSetId": {relation: {entityName: "valuesetcomposeincludevalueset", refField: "valueSetComposeIncludeValueSetId"}}, + "valuesetcomposeincludevalueset[].valuesetcomposeValueSetComposeIncludeId": {relation: {entityName: "valuesetcomposeincludevalueset", refField: "valuesetcomposeValueSetComposeIncludeId"}}, + "valuesetcomposeincludevalueset[].valuesetValueSetId": {relation: {entityName: "valuesetcomposeincludevalueset", refField: "valuesetValueSetId"}}, + "valuesetcomposeincludeconcept[].valueSetComposeIncludeConceptId": {relation: {entityName: "valuesetcomposeincludeconcept", refField: "valueSetComposeIncludeConceptId"}}, + "valuesetcomposeincludeconcept[].valuesetcomposeValueSetComposeIncludeId": {relation: {entityName: "valuesetcomposeincludeconcept", refField: "valuesetcomposeValueSetComposeIncludeId"}}, + "valuesetcomposeincludeconcept[].conceptConceptId": {relation: {entityName: "valuesetcomposeincludeconcept", refField: "conceptConceptId"}} + }, + keyFields: ["valueSetComposeIncludeId"], + joinMetadata: { + valueSet: {entity: ValueSet, fieldName: "valueSet", refTable: "valuesets", refColumns: ["valueSetId"], joinColumns: ["valuesetValueSetId"], 'type: psql:ONE_TO_MANY}, + valuesetcomposeincludevalueset: {entity: ValueSetComposeIncludeValueSet, fieldName: "valuesetcomposeincludevalueset", refTable: "valueset_compose_include_value_sets", refColumns: ["valuesetcomposeValueSetComposeIncludeId"], joinColumns: ["valueSetComposeIncludeId"], 'type: psql:MANY_TO_ONE}, + valuesetcomposeincludeconcept: {entity: ValueSetComposeIncludeConcept, fieldName: "valuesetcomposeincludeconcept", refTable: "valueset_compose_include_concepts", refColumns: ["valuesetcomposeValueSetComposeIncludeId"], joinColumns: ["valueSetComposeIncludeId"], 'type: psql:MANY_TO_ONE} + } + }, + [VALUE_SET_COMPOSE_INCLUDE_VALUE_SET]: { + entityName: "ValueSetComposeIncludeValueSet", + tableName: "valueset_compose_include_value_sets", + fieldMetadata: { + valueSetComposeIncludeValueSetId: {columnName: "valueSetComposeIncludeValueSetId", dbGenerated: true}, + valuesetcomposeValueSetComposeIncludeId: {columnName: "valuesetcomposeValueSetComposeIncludeId"}, + valuesetValueSetId: {columnName: "valuesetValueSetId"}, + "valuesetCompose.valueSetComposeIncludeId": {relation: {entityName: "valuesetCompose", refField: "valueSetComposeIncludeId"}}, + "valuesetCompose.systemFlag": {relation: {entityName: "valuesetCompose", refField: "systemFlag"}}, + "valuesetCompose.valueSetFlag": {relation: {entityName: "valuesetCompose", refField: "valueSetFlag"}}, + "valuesetCompose.conceptFlag": {relation: {entityName: "valuesetCompose", refField: "conceptFlag"}}, + "valuesetCompose.valuesetValueSetId": {relation: {entityName: "valuesetCompose", refField: "valuesetValueSetId"}}, + "valuesetCompose.codeSystemId": {relation: {entityName: "valuesetCompose", refField: "codeSystemId"}}, + "valueset.valueSetId": {relation: {entityName: "valueset", refField: "valueSetId"}}, + "valueset.id": {relation: {entityName: "valueset", refField: "id"}}, + "valueset.url": {relation: {entityName: "valueset", refField: "url"}}, + "valueset.version": {relation: {entityName: "valueset", refField: "version", refColumn: "version"}}, + "valueset.name": {relation: {entityName: "valueset", refField: "name"}}, + "valueset.title": {relation: {entityName: "valueset", refField: "title"}}, + "valueset.status": {relation: {entityName: "valueset", refField: "status"}}, + "valueset.date": {relation: {entityName: "valueset", refField: "date"}}, + "valueset.publisher": {relation: {entityName: "valueset", refField: "publisher"}}, + "valueset.valueSet": {relation: {entityName: "valueset", refField: "valueSet"}} + }, + keyFields: ["valueSetComposeIncludeValueSetId"], + joinMetadata: { + valuesetCompose: {entity: ValueSetComposeInclude, fieldName: "valuesetCompose", refTable: "valueset_compose_includes", refColumns: ["valueSetComposeIncludeId"], joinColumns: ["valuesetcomposeValueSetComposeIncludeId"], 'type: psql:ONE_TO_MANY}, + valueset: {entity: ValueSet, fieldName: "valueset", refTable: "valuesets", refColumns: ["valueSetId"], joinColumns: ["valuesetValueSetId"], 'type: psql:ONE_TO_MANY} + } + }, + [VALUE_SET_COMPOSE_INCLUDE_CONCEPT]: { + entityName: "ValueSetComposeIncludeConcept", + tableName: "valueset_compose_include_concepts", + fieldMetadata: { + valueSetComposeIncludeConceptId: {columnName: "valueSetComposeIncludeConceptId", dbGenerated: true}, + valuesetcomposeValueSetComposeIncludeId: {columnName: "valuesetcomposeValueSetComposeIncludeId"}, + conceptConceptId: {columnName: "conceptConceptId"}, + "valuesetCompose.valueSetComposeIncludeId": {relation: {entityName: "valuesetCompose", refField: "valueSetComposeIncludeId"}}, + "valuesetCompose.systemFlag": {relation: {entityName: "valuesetCompose", refField: "systemFlag"}}, + "valuesetCompose.valueSetFlag": {relation: {entityName: "valuesetCompose", refField: "valueSetFlag"}}, + "valuesetCompose.conceptFlag": {relation: {entityName: "valuesetCompose", refField: "conceptFlag"}}, + "valuesetCompose.valuesetValueSetId": {relation: {entityName: "valuesetCompose", refField: "valuesetValueSetId"}}, + "valuesetCompose.codeSystemId": {relation: {entityName: "valuesetCompose", refField: "codeSystemId"}}, + "concept.conceptId": {relation: {entityName: "concept", refField: "conceptId"}}, + "concept.code": {relation: {entityName: "concept", refField: "code"}}, + "concept.concept": {relation: {entityName: "concept", refField: "concept"}}, + "concept.parentConceptId": {relation: {entityName: "concept", refField: "parentConceptId"}}, + "concept.codesystemCodeSystemId": {relation: {entityName: "concept", refField: "codesystemCodeSystemId"}} + }, + keyFields: ["valueSetComposeIncludeConceptId"], + joinMetadata: { + valuesetCompose: {entity: ValueSetComposeInclude, fieldName: "valuesetCompose", refTable: "valueset_compose_includes", refColumns: ["valueSetComposeIncludeId"], joinColumns: ["valuesetcomposeValueSetComposeIncludeId"], 'type: psql:ONE_TO_MANY}, + concept: {entity: Concept, fieldName: "concept", refTable: "concepts", refColumns: ["conceptId"], joinColumns: ["conceptConceptId"], 'type: psql:ONE_TO_MANY} + } + } + }; + + public isolated function init() returns persist:Error? { + jdbc:Client|error dbClient = new (url = url, user = user, password = password, options = connectionOptions); + if dbClient is error { + return error(dbClient.message()); + } + self.dbClient = dbClient; + self.persistClients = { + [CODE_SYSTEM]: check new (dbClient, self.metadata.get(CODE_SYSTEM), psql:H2_SPECIFICS), + [CONCEPT]: check new (dbClient, self.metadata.get(CONCEPT), psql:H2_SPECIFICS), + [VALUE_SET]: check new (dbClient, self.metadata.get(VALUE_SET), psql:H2_SPECIFICS), + [VALUE_SET_COMPOSE_INCLUDE]: check new (dbClient, self.metadata.get(VALUE_SET_COMPOSE_INCLUDE), psql:H2_SPECIFICS), + [VALUE_SET_COMPOSE_INCLUDE_VALUE_SET]: check new (dbClient, self.metadata.get(VALUE_SET_COMPOSE_INCLUDE_VALUE_SET), psql:H2_SPECIFICS), + [VALUE_SET_COMPOSE_INCLUDE_CONCEPT]: check new (dbClient, self.metadata.get(VALUE_SET_COMPOSE_INCLUDE_CONCEPT), psql:H2_SPECIFICS) + }; + } + + isolated resource function get codesystems(CodeSystemTargetType targetType = <>, sql:ParameterizedQuery whereClause = ``, sql:ParameterizedQuery orderByClause = ``, sql:ParameterizedQuery limitClause = ``, sql:ParameterizedQuery groupByClause = ``) returns stream = @java:Method { + 'class: "io.ballerina.stdlib.persist.sql.datastore.H2Processor", + name: "query" + } external; + + isolated resource function get codesystems/[int codeSystemId](CodeSystemTargetType targetType = <>) returns targetType|persist:Error = @java:Method { + 'class: "io.ballerina.stdlib.persist.sql.datastore.H2Processor", + name: "queryOne" + } external; + + isolated resource function post codesystems(CodeSystemInsert[] data) returns int[]|persist:Error { + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(CODE_SYSTEM); + } + sql:ExecutionResult[] result = check sqlClient.runBatchInsertQuery(data); + return from sql:ExecutionResult inserted in result + where inserted.lastInsertId != () + select inserted.lastInsertId; + } + + isolated resource function put codesystems/[int codeSystemId](CodeSystemUpdate value) returns CodeSystem|persist:Error { + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(CODE_SYSTEM); + } + _ = check sqlClient.runUpdateQuery(codeSystemId, value); + return self->/codesystems/[codeSystemId].get(); + } + + isolated resource function delete codesystems/[int codeSystemId]() returns CodeSystem|persist:Error { + CodeSystem result = check self->/codesystems/[codeSystemId].get(); + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(CODE_SYSTEM); + } + _ = check sqlClient.runDeleteQuery(codeSystemId); + return result; + } + + isolated resource function get concepts(ConceptTargetType targetType = <>, sql:ParameterizedQuery whereClause = ``, sql:ParameterizedQuery orderByClause = ``, sql:ParameterizedQuery limitClause = ``, sql:ParameterizedQuery groupByClause = ``) returns stream = @java:Method { + 'class: "io.ballerina.stdlib.persist.sql.datastore.H2Processor", + name: "query" + } external; + + isolated resource function get concepts/[int conceptId](ConceptTargetType targetType = <>) returns targetType|persist:Error = @java:Method { + 'class: "io.ballerina.stdlib.persist.sql.datastore.H2Processor", + name: "queryOne" + } external; + + isolated resource function post concepts(ConceptInsert[] data) returns int[]|persist:Error { + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(CONCEPT); + } + sql:ExecutionResult[] result = check sqlClient.runBatchInsertQuery(data); + return from sql:ExecutionResult inserted in result + where inserted.lastInsertId != () + select inserted.lastInsertId; + } + + isolated resource function put concepts/[int conceptId](ConceptUpdate value) returns Concept|persist:Error { + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(CONCEPT); + } + _ = check sqlClient.runUpdateQuery(conceptId, value); + return self->/concepts/[conceptId].get(); + } + + isolated resource function delete concepts/[int conceptId]() returns Concept|persist:Error { + Concept result = check self->/concepts/[conceptId].get(); + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(CONCEPT); + } + _ = check sqlClient.runDeleteQuery(conceptId); + return result; + } + + isolated resource function get valuesets(ValueSetTargetType targetType = <>, sql:ParameterizedQuery whereClause = ``, sql:ParameterizedQuery orderByClause = ``, sql:ParameterizedQuery limitClause = ``, sql:ParameterizedQuery groupByClause = ``) returns stream = @java:Method { + 'class: "io.ballerina.stdlib.persist.sql.datastore.H2Processor", + name: "query" + } external; + + isolated resource function get valuesets/[int valueSetId](ValueSetTargetType targetType = <>) returns targetType|persist:Error = @java:Method { + 'class: "io.ballerina.stdlib.persist.sql.datastore.H2Processor", + name: "queryOne" + } external; + + isolated resource function post valuesets(ValueSetInsert[] data) returns int[]|persist:Error { + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(VALUE_SET); + } + sql:ExecutionResult[] result = check sqlClient.runBatchInsertQuery(data); + return from sql:ExecutionResult inserted in result + where inserted.lastInsertId != () + select inserted.lastInsertId; + } + + isolated resource function put valuesets/[int valueSetId](ValueSetUpdate value) returns ValueSet|persist:Error { + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(VALUE_SET); + } + _ = check sqlClient.runUpdateQuery(valueSetId, value); + return self->/valuesets/[valueSetId].get(); + } + + isolated resource function delete valuesets/[int valueSetId]() returns ValueSet|persist:Error { + ValueSet result = check self->/valuesets/[valueSetId].get(); + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(VALUE_SET); + } + _ = check sqlClient.runDeleteQuery(valueSetId); + return result; + } + + isolated resource function get valuesetcomposeincludes(ValueSetComposeIncludeTargetType targetType = <>, sql:ParameterizedQuery whereClause = ``, sql:ParameterizedQuery orderByClause = ``, sql:ParameterizedQuery limitClause = ``, sql:ParameterizedQuery groupByClause = ``) returns stream = @java:Method { + 'class: "io.ballerina.stdlib.persist.sql.datastore.H2Processor", + name: "query" + } external; + + isolated resource function get valuesetcomposeincludes/[int valueSetComposeIncludeId](ValueSetComposeIncludeTargetType targetType = <>) returns targetType|persist:Error = @java:Method { + 'class: "io.ballerina.stdlib.persist.sql.datastore.H2Processor", + name: "queryOne" + } external; + + isolated resource function post valuesetcomposeincludes(ValueSetComposeIncludeInsert[] data) returns int[]|persist:Error { + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(VALUE_SET_COMPOSE_INCLUDE); + } + sql:ExecutionResult[] result = check sqlClient.runBatchInsertQuery(data); + return from sql:ExecutionResult inserted in result + where inserted.lastInsertId != () + select inserted.lastInsertId; + } + + isolated resource function put valuesetcomposeincludes/[int valueSetComposeIncludeId](ValueSetComposeIncludeUpdate value) returns ValueSetComposeInclude|persist:Error { + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(VALUE_SET_COMPOSE_INCLUDE); + } + _ = check sqlClient.runUpdateQuery(valueSetComposeIncludeId, value); + return self->/valuesetcomposeincludes/[valueSetComposeIncludeId].get(); + } + + isolated resource function delete valuesetcomposeincludes/[int valueSetComposeIncludeId]() returns ValueSetComposeInclude|persist:Error { + ValueSetComposeInclude result = check self->/valuesetcomposeincludes/[valueSetComposeIncludeId].get(); + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(VALUE_SET_COMPOSE_INCLUDE); + } + _ = check sqlClient.runDeleteQuery(valueSetComposeIncludeId); + return result; + } + + isolated resource function get valuesetcomposeincludevaluesets(ValueSetComposeIncludeValueSetTargetType targetType = <>, sql:ParameterizedQuery whereClause = ``, sql:ParameterizedQuery orderByClause = ``, sql:ParameterizedQuery limitClause = ``, sql:ParameterizedQuery groupByClause = ``) returns stream = @java:Method { + 'class: "io.ballerina.stdlib.persist.sql.datastore.H2Processor", + name: "query" + } external; + + isolated resource function get valuesetcomposeincludevaluesets/[int valueSetComposeIncludeValueSetId](ValueSetComposeIncludeValueSetTargetType targetType = <>) returns targetType|persist:Error = @java:Method { + 'class: "io.ballerina.stdlib.persist.sql.datastore.H2Processor", + name: "queryOne" + } external; + + isolated resource function post valuesetcomposeincludevaluesets(ValueSetComposeIncludeValueSetInsert[] data) returns int[]|persist:Error { + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(VALUE_SET_COMPOSE_INCLUDE_VALUE_SET); + } + sql:ExecutionResult[] result = check sqlClient.runBatchInsertQuery(data); + return from sql:ExecutionResult inserted in result + where inserted.lastInsertId != () + select inserted.lastInsertId; + } + + isolated resource function put valuesetcomposeincludevaluesets/[int valueSetComposeIncludeValueSetId](ValueSetComposeIncludeValueSetUpdate value) returns ValueSetComposeIncludeValueSet|persist:Error { + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(VALUE_SET_COMPOSE_INCLUDE_VALUE_SET); + } + _ = check sqlClient.runUpdateQuery(valueSetComposeIncludeValueSetId, value); + return self->/valuesetcomposeincludevaluesets/[valueSetComposeIncludeValueSetId].get(); + } + + isolated resource function delete valuesetcomposeincludevaluesets/[int valueSetComposeIncludeValueSetId]() returns ValueSetComposeIncludeValueSet|persist:Error { + ValueSetComposeIncludeValueSet result = check self->/valuesetcomposeincludevaluesets/[valueSetComposeIncludeValueSetId].get(); + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(VALUE_SET_COMPOSE_INCLUDE_VALUE_SET); + } + _ = check sqlClient.runDeleteQuery(valueSetComposeIncludeValueSetId); + return result; + } + + isolated resource function get valuesetcomposeincludeconcepts(ValueSetComposeIncludeConceptTargetType targetType = <>, sql:ParameterizedQuery whereClause = ``, sql:ParameterizedQuery orderByClause = ``, sql:ParameterizedQuery limitClause = ``, sql:ParameterizedQuery groupByClause = ``) returns stream = @java:Method { + 'class: "io.ballerina.stdlib.persist.sql.datastore.H2Processor", + name: "query" + } external; + + isolated resource function get valuesetcomposeincludeconcepts/[int valueSetComposeIncludeConceptId](ValueSetComposeIncludeConceptTargetType targetType = <>) returns targetType|persist:Error = @java:Method { + 'class: "io.ballerina.stdlib.persist.sql.datastore.H2Processor", + name: "queryOne" + } external; + + isolated resource function post valuesetcomposeincludeconcepts(ValueSetComposeIncludeConceptInsert[] data) returns int[]|persist:Error { + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(VALUE_SET_COMPOSE_INCLUDE_CONCEPT); + } + sql:ExecutionResult[] result = check sqlClient.runBatchInsertQuery(data); + return from sql:ExecutionResult inserted in result + where inserted.lastInsertId != () + select inserted.lastInsertId; + } + + isolated resource function put valuesetcomposeincludeconcepts/[int valueSetComposeIncludeConceptId](ValueSetComposeIncludeConceptUpdate value) returns ValueSetComposeIncludeConcept|persist:Error { + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(VALUE_SET_COMPOSE_INCLUDE_CONCEPT); + } + _ = check sqlClient.runUpdateQuery(valueSetComposeIncludeConceptId, value); + return self->/valuesetcomposeincludeconcepts/[valueSetComposeIncludeConceptId].get(); + } + + isolated resource function delete valuesetcomposeincludeconcepts/[int valueSetComposeIncludeConceptId]() returns ValueSetComposeIncludeConcept|persist:Error { + ValueSetComposeIncludeConcept result = check self->/valuesetcomposeincludeconcepts/[valueSetComposeIncludeConceptId].get(); + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(VALUE_SET_COMPOSE_INCLUDE_CONCEPT); + } + _ = check sqlClient.runDeleteQuery(valueSetComposeIncludeConceptId); + return result; + } + + remote isolated function queryNativeSQL(sql:ParameterizedQuery sqlQuery, typedesc rowType = <>) returns stream = @java:Method { + 'class: "io.ballerina.stdlib.persist.sql.datastore.H2Processor" + } external; + + remote isolated function executeNativeSQL(sql:ParameterizedQuery sqlQuery) returns psql:ExecutionResult|persist:Error = @java:Method { + 'class: "io.ballerina.stdlib.persist.sql.datastore.H2Processor" + } external; + + public isolated function close() returns persist:Error? { + error? result = self.dbClient.close(); + if result is error { + return error(result.message()); + } + return result; + } +} + diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_114/modules/h2_entities/persist_db_config.bal b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_114/modules/h2_entities/persist_db_config.bal new file mode 100644 index 000000000..85c23bc70 --- /dev/null +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_114/modules/h2_entities/persist_db_config.bal @@ -0,0 +1,12 @@ +// AUTO-GENERATED FILE. DO NOT MODIFY. + +// This file is an auto-generated file by Ballerina persistence layer. +// It should not be modified by hand. + +import ballerinax/java.jdbc; + +configurable string url = ?; +configurable string user = ?; +configurable string password = ?; +configurable jdbc:Options & readonly connectionOptions = {}; + diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_114/modules/h2_entities/persist_types.bal b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_114/modules/h2_entities/persist_types.bal new file mode 100644 index 000000000..3a8fc2797 --- /dev/null +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_114/modules/h2_entities/persist_types.bal @@ -0,0 +1,265 @@ +// AUTO-GENERATED FILE. DO NOT MODIFY. + +// This file is an auto-generated file by Ballerina persistence layer for model. +// It should not be modified by hand. + +public type CodeSystem record {| + readonly int codeSystemId; + string id; + string url; + string 'version; + string name; + string title; + string status; + string date; + string publisher; + byte[] codeSystem; + +|}; + +public type CodeSystemOptionalized record {| + int codeSystemId?; + string id?; + string url?; + string 'version?; + string name?; + string title?; + string status?; + string date?; + string publisher?; + byte[] codeSystem?; +|}; + +public type CodeSystemWithRelations record {| + *CodeSystemOptionalized; + ConceptOptionalized[] concepts?; +|}; + +public type CodeSystemTargetType typedesc; + +public type CodeSystemInsert record {| + string id; + string url; + string 'version; + string name; + string title; + string status; + string date; + string publisher; + byte[] codeSystem; +|}; + +public type CodeSystemUpdate record {| + string id?; + string url?; + string 'version?; + string name?; + string title?; + string status?; + string date?; + string publisher?; + byte[] codeSystem?; +|}; + +public type Concept record {| + readonly int conceptId; + string code; + byte[] concept; + int? parentConceptId; + int codesystemCodeSystemId; + +|}; + +public type ConceptOptionalized record {| + int conceptId?; + string code?; + byte[] concept?; + int? parentConceptId?; + int codesystemCodeSystemId?; +|}; + +public type ConceptWithRelations record {| + *ConceptOptionalized; + CodeSystemOptionalized codeSystem?; + ValueSetComposeIncludeConceptOptionalized[] valuesetcomposeincludeconcept?; +|}; + +public type ConceptTargetType typedesc; + +public type ConceptInsert record {| + string code; + byte[] concept; + int? parentConceptId; + int codesystemCodeSystemId; +|}; + +public type ConceptUpdate record {| + string code?; + byte[] concept?; + int? parentConceptId?; + int codesystemCodeSystemId?; +|}; + +public type ValueSet record {| + readonly int valueSetId; + string id; + string url; + string 'version; + string name; + string title; + string status; + string date; + string publisher; + byte[] valueSet; + +|}; + +public type ValueSetOptionalized record {| + int valueSetId?; + string id?; + string url?; + string 'version?; + string name?; + string title?; + string status?; + string date?; + string publisher?; + byte[] valueSet?; +|}; + +public type ValueSetWithRelations record {| + *ValueSetOptionalized; + ValueSetComposeIncludeOptionalized[] composes?; + ValueSetComposeIncludeValueSetOptionalized[] conceptsInValueSetConcepts?; +|}; + +public type ValueSetTargetType typedesc; + +public type ValueSetInsert record {| + string id; + string url; + string 'version; + string name; + string title; + string status; + string date; + string publisher; + byte[] valueSet; +|}; + +public type ValueSetUpdate record {| + string id?; + string url?; + string 'version?; + string name?; + string title?; + string status?; + string date?; + string publisher?; + byte[] valueSet?; +|}; + +public type ValueSetComposeInclude record {| + readonly int valueSetComposeIncludeId; + boolean systemFlag; + boolean valueSetFlag; + boolean conceptFlag; + int valuesetValueSetId; + + int? codeSystemId; +|}; + +public type ValueSetComposeIncludeOptionalized record {| + int valueSetComposeIncludeId?; + boolean systemFlag?; + boolean valueSetFlag?; + boolean conceptFlag?; + int valuesetValueSetId?; + int? codeSystemId?; +|}; + +public type ValueSetComposeIncludeWithRelations record {| + *ValueSetComposeIncludeOptionalized; + ValueSetOptionalized valueSet?; + ValueSetComposeIncludeValueSetOptionalized[] valuesetcomposeincludevalueset?; + ValueSetComposeIncludeConceptOptionalized[] valuesetcomposeincludeconcept?; +|}; + +public type ValueSetComposeIncludeTargetType typedesc; + +public type ValueSetComposeIncludeInsert record {| + boolean systemFlag; + boolean valueSetFlag; + boolean conceptFlag; + int valuesetValueSetId; + int? codeSystemId; +|}; + +public type ValueSetComposeIncludeUpdate record {| + boolean systemFlag?; + boolean valueSetFlag?; + boolean conceptFlag?; + int valuesetValueSetId?; + int? codeSystemId?; +|}; + +public type ValueSetComposeIncludeValueSet record {| + readonly int valueSetComposeIncludeValueSetId; + int valuesetcomposeValueSetComposeIncludeId; + int valuesetValueSetId; +|}; + +public type ValueSetComposeIncludeValueSetOptionalized record {| + int valueSetComposeIncludeValueSetId?; + int valuesetcomposeValueSetComposeIncludeId?; + int valuesetValueSetId?; +|}; + +public type ValueSetComposeIncludeValueSetWithRelations record {| + *ValueSetComposeIncludeValueSetOptionalized; + ValueSetComposeIncludeOptionalized valuesetCompose?; + ValueSetOptionalized valueset?; +|}; + +public type ValueSetComposeIncludeValueSetTargetType typedesc; + +public type ValueSetComposeIncludeValueSetInsert record {| + int valuesetcomposeValueSetComposeIncludeId; + int valuesetValueSetId; +|}; + +public type ValueSetComposeIncludeValueSetUpdate record {| + int valuesetcomposeValueSetComposeIncludeId?; + int valuesetValueSetId?; +|}; + +public type ValueSetComposeIncludeConcept record {| + readonly int valueSetComposeIncludeConceptId; + int valuesetcomposeValueSetComposeIncludeId; + int conceptConceptId; +|}; + +public type ValueSetComposeIncludeConceptOptionalized record {| + int valueSetComposeIncludeConceptId?; + int valuesetcomposeValueSetComposeIncludeId?; + int conceptConceptId?; +|}; + +public type ValueSetComposeIncludeConceptWithRelations record {| + *ValueSetComposeIncludeConceptOptionalized; + ValueSetComposeIncludeOptionalized valuesetCompose?; + ConceptOptionalized concept?; +|}; + +public type ValueSetComposeIncludeConceptTargetType typedesc; + +public type ValueSetComposeIncludeConceptInsert record {| + int valuesetcomposeValueSetComposeIncludeId; + int conceptConceptId; +|}; + +public type ValueSetComposeIncludeConceptUpdate record {| + int valuesetcomposeValueSetComposeIncludeId?; + int conceptConceptId?; +|}; + diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_114/modules/h2_entities/script.sql b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_114/modules/h2_entities/script.sql new file mode 100644 index 000000000..10b611c46 --- /dev/null +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_114/modules/h2_entities/script.sql @@ -0,0 +1,80 @@ +-- AUTO-GENERATED FILE. + +-- This file is an auto-generated file by Ballerina persistence layer for model. +-- Please verify the generated scripts and execute them against the target DB server. + +DROP TABLE IF EXISTS "valueset_compose_include_concepts"; +DROP TABLE IF EXISTS "valueset_compose_include_value_sets"; +DROP TABLE IF EXISTS "concepts"; +DROP TABLE IF EXISTS "valueset_compose_includes"; +DROP TABLE IF EXISTS "codesystems"; +DROP TABLE IF EXISTS "valuesets"; + +CREATE TABLE "valuesets" ( + "valueSetId" INT AUTO_INCREMENT, + "id" VARCHAR(191) NOT NULL, + "url" VARCHAR(191) NOT NULL, + "version" VARCHAR(191) NOT NULL, + "name" VARCHAR(191) NOT NULL, + "title" VARCHAR(191) NOT NULL, + "status" VARCHAR(191) NOT NULL, + "date" VARCHAR(191) NOT NULL, + "publisher" VARCHAR(191) NOT NULL, + "valueSet" LONGBLOB NOT NULL, + PRIMARY KEY("valueSetId") +); + +CREATE TABLE "codesystems" ( + "codeSystemId" INT AUTO_INCREMENT, + "id" VARCHAR(191) NOT NULL, + "url" VARCHAR(191) NOT NULL, + "version" VARCHAR(191) NOT NULL, + "name" VARCHAR(191) NOT NULL, + "title" VARCHAR(191) NOT NULL, + "status" VARCHAR(191) NOT NULL, + "date" VARCHAR(191) NOT NULL, + "publisher" VARCHAR(191) NOT NULL, + "codeSystem" LONGBLOB NOT NULL, + PRIMARY KEY("codeSystemId") +); + +CREATE TABLE "valueset_compose_includes" ( + "valueSetComposeIncludeId" INT AUTO_INCREMENT, + "systemFlag" BOOLEAN NOT NULL, + "valueSetFlag" BOOLEAN NOT NULL, + "conceptFlag" BOOLEAN NOT NULL, + "codeSystemId" INT, + "valuesetValueSetId" INT NOT NULL, + FOREIGN KEY("valuesetValueSetId") REFERENCES "valuesets"("valueSetId"), + PRIMARY KEY("valueSetComposeIncludeId") +); + +CREATE TABLE "concepts" ( + "conceptId" INT AUTO_INCREMENT, + "code" VARCHAR(191) NOT NULL, + "concept" LONGBLOB NOT NULL, + "parentConceptId" INT, + "codesystemCodeSystemId" INT NOT NULL, + FOREIGN KEY("codesystemCodeSystemId") REFERENCES "codesystems"("codeSystemId"), + PRIMARY KEY("conceptId") +); + +CREATE TABLE "valueset_compose_include_value_sets" ( + "valueSetComposeIncludeValueSetId" INT AUTO_INCREMENT, + "valuesetcomposeValueSetComposeIncludeId" INT NOT NULL, + FOREIGN KEY("valuesetcomposeValueSetComposeIncludeId") REFERENCES "valueset_compose_includes"("valueSetComposeIncludeId"), + "valuesetValueSetId" INT NOT NULL, + FOREIGN KEY("valuesetValueSetId") REFERENCES "valuesets"("valueSetId"), + PRIMARY KEY("valueSetComposeIncludeValueSetId") +); + +CREATE TABLE "valueset_compose_include_concepts" ( + "valueSetComposeIncludeConceptId" INT AUTO_INCREMENT, + "valuesetcomposeValueSetComposeIncludeId" INT NOT NULL, + FOREIGN KEY("valuesetcomposeValueSetComposeIncludeId") REFERENCES "valueset_compose_includes"("valueSetComposeIncludeId"), + "conceptConceptId" INT NOT NULL, + FOREIGN KEY("conceptConceptId") REFERENCES "concepts"("conceptId"), + PRIMARY KEY("valueSetComposeIncludeConceptId") +); + + diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_114/modules/mssql_entities/persist_client.bal b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_114/modules/mssql_entities/persist_client.bal new file mode 100644 index 000000000..ecc5bd867 --- /dev/null +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_114/modules/mssql_entities/persist_client.bal @@ -0,0 +1,492 @@ +// AUTO-GENERATED FILE. DO NOT MODIFY. + +// This file is an auto-generated file by Ballerina persistence layer for model. +// It should not be modified by hand. + +import ballerina/jballerina.java; +import ballerina/persist; +import ballerina/sql; +import ballerinax/mssql; +import ballerinax/mssql.driver as _; +import ballerinax/persist.sql as psql; + +const CODE_SYSTEM = "codesystems"; +const CONCEPT = "concepts"; +const VALUE_SET = "valuesets"; +const VALUE_SET_COMPOSE_INCLUDE = "valuesetcomposeincludes"; +const VALUE_SET_COMPOSE_INCLUDE_VALUE_SET = "valuesetcomposeincludevaluesets"; +const VALUE_SET_COMPOSE_INCLUDE_CONCEPT = "valuesetcomposeincludeconcepts"; + +public isolated client class Client { + *persist:AbstractPersistClient; + + private final mssql:Client dbClient; + + private final map persistClients; + + private final record {|psql:SQLMetadata...;|} metadata = { + [CODE_SYSTEM]: { + entityName: "CodeSystem", + tableName: "codesystems", + fieldMetadata: { + codeSystemId: {columnName: "codeSystemId", dbGenerated: true}, + id: {columnName: "id"}, + url: {columnName: "url"}, + 'version: {columnName: "version"}, + name: {columnName: "name"}, + title: {columnName: "title"}, + status: {columnName: "status"}, + date: {columnName: "date"}, + publisher: {columnName: "publisher"}, + codeSystem: {columnName: "codeSystem"}, + "concepts[].conceptId": {relation: {entityName: "concepts", refField: "conceptId"}}, + "concepts[].code": {relation: {entityName: "concepts", refField: "code"}}, + "concepts[].concept": {relation: {entityName: "concepts", refField: "concept"}}, + "concepts[].parentConceptId": {relation: {entityName: "concepts", refField: "parentConceptId"}}, + "concepts[].codesystemCodeSystemId": {relation: {entityName: "concepts", refField: "codesystemCodeSystemId"}} + }, + keyFields: ["codeSystemId"], + joinMetadata: {concepts: {entity: Concept, fieldName: "concepts", refTable: "concepts", refColumns: ["codesystemCodeSystemId"], joinColumns: ["codeSystemId"], 'type: psql:MANY_TO_ONE}} + }, + [CONCEPT]: { + entityName: "Concept", + tableName: "concepts", + fieldMetadata: { + conceptId: {columnName: "conceptId", dbGenerated: true}, + code: {columnName: "code"}, + concept: {columnName: "concept"}, + parentConceptId: {columnName: "parentConceptId"}, + codesystemCodeSystemId: {columnName: "codesystemCodeSystemId"}, + "codeSystem.codeSystemId": {relation: {entityName: "codeSystem", refField: "codeSystemId"}}, + "codeSystem.id": {relation: {entityName: "codeSystem", refField: "id"}}, + "codeSystem.url": {relation: {entityName: "codeSystem", refField: "url"}}, + "codeSystem.version": {relation: {entityName: "codeSystem", refField: "version", refColumn: "version"}}, + "codeSystem.name": {relation: {entityName: "codeSystem", refField: "name"}}, + "codeSystem.title": {relation: {entityName: "codeSystem", refField: "title"}}, + "codeSystem.status": {relation: {entityName: "codeSystem", refField: "status"}}, + "codeSystem.date": {relation: {entityName: "codeSystem", refField: "date"}}, + "codeSystem.publisher": {relation: {entityName: "codeSystem", refField: "publisher"}}, + "codeSystem.codeSystem": {relation: {entityName: "codeSystem", refField: "codeSystem"}}, + "valuesetcomposeincludeconcept[].valueSetComposeIncludeConceptId": {relation: {entityName: "valuesetcomposeincludeconcept", refField: "valueSetComposeIncludeConceptId"}}, + "valuesetcomposeincludeconcept[].valuesetcomposeValueSetComposeIncludeId": {relation: {entityName: "valuesetcomposeincludeconcept", refField: "valuesetcomposeValueSetComposeIncludeId"}}, + "valuesetcomposeincludeconcept[].conceptConceptId": {relation: {entityName: "valuesetcomposeincludeconcept", refField: "conceptConceptId"}} + }, + keyFields: ["conceptId"], + joinMetadata: { + codeSystem: {entity: CodeSystem, fieldName: "codeSystem", refTable: "codesystems", refColumns: ["codeSystemId"], joinColumns: ["codesystemCodeSystemId"], 'type: psql:ONE_TO_MANY}, + valuesetcomposeincludeconcept: {entity: ValueSetComposeIncludeConcept, fieldName: "valuesetcomposeincludeconcept", refTable: "valueset_compose_include_concepts", refColumns: ["conceptConceptId"], joinColumns: ["conceptId"], 'type: psql:MANY_TO_ONE} + } + }, + [VALUE_SET]: { + entityName: "ValueSet", + tableName: "valuesets", + fieldMetadata: { + valueSetId: {columnName: "valueSetId", dbGenerated: true}, + id: {columnName: "id"}, + url: {columnName: "url"}, + 'version: {columnName: "version"}, + name: {columnName: "name"}, + title: {columnName: "title"}, + status: {columnName: "status"}, + date: {columnName: "date"}, + publisher: {columnName: "publisher"}, + valueSet: {columnName: "valueSet"}, + "composes[].valueSetComposeIncludeId": {relation: {entityName: "composes", refField: "valueSetComposeIncludeId"}}, + "composes[].systemFlag": {relation: {entityName: "composes", refField: "systemFlag"}}, + "composes[].valueSetFlag": {relation: {entityName: "composes", refField: "valueSetFlag"}}, + "composes[].conceptFlag": {relation: {entityName: "composes", refField: "conceptFlag"}}, + "composes[].valuesetValueSetId": {relation: {entityName: "composes", refField: "valuesetValueSetId"}}, + "composes[].codeSystemId": {relation: {entityName: "composes", refField: "codeSystemId"}}, + "conceptsInValueSetConcepts[].valueSetComposeIncludeValueSetId": {relation: {entityName: "conceptsInValueSetConcepts", refField: "valueSetComposeIncludeValueSetId"}}, + "conceptsInValueSetConcepts[].valuesetcomposeValueSetComposeIncludeId": {relation: {entityName: "conceptsInValueSetConcepts", refField: "valuesetcomposeValueSetComposeIncludeId"}}, + "conceptsInValueSetConcepts[].valuesetValueSetId": {relation: {entityName: "conceptsInValueSetConcepts", refField: "valuesetValueSetId"}} + }, + keyFields: ["valueSetId"], + joinMetadata: { + composes: {entity: ValueSetComposeInclude, fieldName: "composes", refTable: "valueset_compose_includes", refColumns: ["valuesetValueSetId"], joinColumns: ["valueSetId"], 'type: psql:MANY_TO_ONE}, + conceptsInValueSetConcepts: {entity: ValueSetComposeIncludeValueSet, fieldName: "conceptsInValueSetConcepts", refTable: "valueset_compose_include_value_sets", refColumns: ["valuesetValueSetId"], joinColumns: ["valueSetId"], 'type: psql:MANY_TO_ONE} + } + }, + [VALUE_SET_COMPOSE_INCLUDE]: { + entityName: "ValueSetComposeInclude", + tableName: "valueset_compose_includes", + fieldMetadata: { + valueSetComposeIncludeId: {columnName: "valueSetComposeIncludeId", dbGenerated: true}, + systemFlag: {columnName: "systemFlag"}, + valueSetFlag: {columnName: "valueSetFlag"}, + conceptFlag: {columnName: "conceptFlag"}, + valuesetValueSetId: {columnName: "valuesetValueSetId"}, + codeSystemId: {columnName: "codeSystemId"}, + "valueSet.valueSetId": {relation: {entityName: "valueSet", refField: "valueSetId"}}, + "valueSet.id": {relation: {entityName: "valueSet", refField: "id"}}, + "valueSet.url": {relation: {entityName: "valueSet", refField: "url"}}, + "valueSet.version": {relation: {entityName: "valueSet", refField: "version", refColumn: "version"}}, + "valueSet.name": {relation: {entityName: "valueSet", refField: "name"}}, + "valueSet.title": {relation: {entityName: "valueSet", refField: "title"}}, + "valueSet.status": {relation: {entityName: "valueSet", refField: "status"}}, + "valueSet.date": {relation: {entityName: "valueSet", refField: "date"}}, + "valueSet.publisher": {relation: {entityName: "valueSet", refField: "publisher"}}, + "valueSet.valueSet": {relation: {entityName: "valueSet", refField: "valueSet"}}, + "valuesetcomposeincludevalueset[].valueSetComposeIncludeValueSetId": {relation: {entityName: "valuesetcomposeincludevalueset", refField: "valueSetComposeIncludeValueSetId"}}, + "valuesetcomposeincludevalueset[].valuesetcomposeValueSetComposeIncludeId": {relation: {entityName: "valuesetcomposeincludevalueset", refField: "valuesetcomposeValueSetComposeIncludeId"}}, + "valuesetcomposeincludevalueset[].valuesetValueSetId": {relation: {entityName: "valuesetcomposeincludevalueset", refField: "valuesetValueSetId"}}, + "valuesetcomposeincludeconcept[].valueSetComposeIncludeConceptId": {relation: {entityName: "valuesetcomposeincludeconcept", refField: "valueSetComposeIncludeConceptId"}}, + "valuesetcomposeincludeconcept[].valuesetcomposeValueSetComposeIncludeId": {relation: {entityName: "valuesetcomposeincludeconcept", refField: "valuesetcomposeValueSetComposeIncludeId"}}, + "valuesetcomposeincludeconcept[].conceptConceptId": {relation: {entityName: "valuesetcomposeincludeconcept", refField: "conceptConceptId"}} + }, + keyFields: ["valueSetComposeIncludeId"], + joinMetadata: { + valueSet: {entity: ValueSet, fieldName: "valueSet", refTable: "valuesets", refColumns: ["valueSetId"], joinColumns: ["valuesetValueSetId"], 'type: psql:ONE_TO_MANY}, + valuesetcomposeincludevalueset: {entity: ValueSetComposeIncludeValueSet, fieldName: "valuesetcomposeincludevalueset", refTable: "valueset_compose_include_value_sets", refColumns: ["valuesetcomposeValueSetComposeIncludeId"], joinColumns: ["valueSetComposeIncludeId"], 'type: psql:MANY_TO_ONE}, + valuesetcomposeincludeconcept: {entity: ValueSetComposeIncludeConcept, fieldName: "valuesetcomposeincludeconcept", refTable: "valueset_compose_include_concepts", refColumns: ["valuesetcomposeValueSetComposeIncludeId"], joinColumns: ["valueSetComposeIncludeId"], 'type: psql:MANY_TO_ONE} + } + }, + [VALUE_SET_COMPOSE_INCLUDE_VALUE_SET]: { + entityName: "ValueSetComposeIncludeValueSet", + tableName: "valueset_compose_include_value_sets", + fieldMetadata: { + valueSetComposeIncludeValueSetId: {columnName: "valueSetComposeIncludeValueSetId", dbGenerated: true}, + valuesetcomposeValueSetComposeIncludeId: {columnName: "valuesetcomposeValueSetComposeIncludeId"}, + valuesetValueSetId: {columnName: "valuesetValueSetId"}, + "valuesetCompose.valueSetComposeIncludeId": {relation: {entityName: "valuesetCompose", refField: "valueSetComposeIncludeId"}}, + "valuesetCompose.systemFlag": {relation: {entityName: "valuesetCompose", refField: "systemFlag"}}, + "valuesetCompose.valueSetFlag": {relation: {entityName: "valuesetCompose", refField: "valueSetFlag"}}, + "valuesetCompose.conceptFlag": {relation: {entityName: "valuesetCompose", refField: "conceptFlag"}}, + "valuesetCompose.valuesetValueSetId": {relation: {entityName: "valuesetCompose", refField: "valuesetValueSetId"}}, + "valuesetCompose.codeSystemId": {relation: {entityName: "valuesetCompose", refField: "codeSystemId"}}, + "valueset.valueSetId": {relation: {entityName: "valueset", refField: "valueSetId"}}, + "valueset.id": {relation: {entityName: "valueset", refField: "id"}}, + "valueset.url": {relation: {entityName: "valueset", refField: "url"}}, + "valueset.version": {relation: {entityName: "valueset", refField: "version", refColumn: "version"}}, + "valueset.name": {relation: {entityName: "valueset", refField: "name"}}, + "valueset.title": {relation: {entityName: "valueset", refField: "title"}}, + "valueset.status": {relation: {entityName: "valueset", refField: "status"}}, + "valueset.date": {relation: {entityName: "valueset", refField: "date"}}, + "valueset.publisher": {relation: {entityName: "valueset", refField: "publisher"}}, + "valueset.valueSet": {relation: {entityName: "valueset", refField: "valueSet"}} + }, + keyFields: ["valueSetComposeIncludeValueSetId"], + joinMetadata: { + valuesetCompose: {entity: ValueSetComposeInclude, fieldName: "valuesetCompose", refTable: "valueset_compose_includes", refColumns: ["valueSetComposeIncludeId"], joinColumns: ["valuesetcomposeValueSetComposeIncludeId"], 'type: psql:ONE_TO_MANY}, + valueset: {entity: ValueSet, fieldName: "valueset", refTable: "valuesets", refColumns: ["valueSetId"], joinColumns: ["valuesetValueSetId"], 'type: psql:ONE_TO_MANY} + } + }, + [VALUE_SET_COMPOSE_INCLUDE_CONCEPT]: { + entityName: "ValueSetComposeIncludeConcept", + tableName: "valueset_compose_include_concepts", + fieldMetadata: { + valueSetComposeIncludeConceptId: {columnName: "valueSetComposeIncludeConceptId", dbGenerated: true}, + valuesetcomposeValueSetComposeIncludeId: {columnName: "valuesetcomposeValueSetComposeIncludeId"}, + conceptConceptId: {columnName: "conceptConceptId"}, + "valuesetCompose.valueSetComposeIncludeId": {relation: {entityName: "valuesetCompose", refField: "valueSetComposeIncludeId"}}, + "valuesetCompose.systemFlag": {relation: {entityName: "valuesetCompose", refField: "systemFlag"}}, + "valuesetCompose.valueSetFlag": {relation: {entityName: "valuesetCompose", refField: "valueSetFlag"}}, + "valuesetCompose.conceptFlag": {relation: {entityName: "valuesetCompose", refField: "conceptFlag"}}, + "valuesetCompose.valuesetValueSetId": {relation: {entityName: "valuesetCompose", refField: "valuesetValueSetId"}}, + "valuesetCompose.codeSystemId": {relation: {entityName: "valuesetCompose", refField: "codeSystemId"}}, + "concept.conceptId": {relation: {entityName: "concept", refField: "conceptId"}}, + "concept.code": {relation: {entityName: "concept", refField: "code"}}, + "concept.concept": {relation: {entityName: "concept", refField: "concept"}}, + "concept.parentConceptId": {relation: {entityName: "concept", refField: "parentConceptId"}}, + "concept.codesystemCodeSystemId": {relation: {entityName: "concept", refField: "codesystemCodeSystemId"}} + }, + keyFields: ["valueSetComposeIncludeConceptId"], + joinMetadata: { + valuesetCompose: {entity: ValueSetComposeInclude, fieldName: "valuesetCompose", refTable: "valueset_compose_includes", refColumns: ["valueSetComposeIncludeId"], joinColumns: ["valuesetcomposeValueSetComposeIncludeId"], 'type: psql:ONE_TO_MANY}, + concept: {entity: Concept, fieldName: "concept", refTable: "concepts", refColumns: ["conceptId"], joinColumns: ["conceptConceptId"], 'type: psql:ONE_TO_MANY} + } + } + }; + + public isolated function init() returns persist:Error? { + mssql:Client|error dbClient = new (host = host, user = user, password = password, database = database, port = port, options = connectionOptions); + if dbClient is error { + return error(dbClient.message()); + } + self.dbClient = dbClient; + if defaultSchema != () { + lock { + foreach string key in self.metadata.keys() { + psql:SQLMetadata metadata = self.metadata.get(key); + if metadata.schemaName == () { + metadata.schemaName = defaultSchema; + } + map? joinMetadataMap = metadata.joinMetadata; + if joinMetadataMap == () { + continue; + } + foreach [string, psql:JoinMetadata] [_, joinMetadata] in joinMetadataMap.entries() { + if joinMetadata.refSchema == () { + joinMetadata.refSchema = defaultSchema; + } + } + } + } + } + self.persistClients = { + [CODE_SYSTEM]: check new (dbClient, self.metadata.get(CODE_SYSTEM).cloneReadOnly(), psql:MSSQL_SPECIFICS), + [CONCEPT]: check new (dbClient, self.metadata.get(CONCEPT).cloneReadOnly(), psql:MSSQL_SPECIFICS), + [VALUE_SET]: check new (dbClient, self.metadata.get(VALUE_SET).cloneReadOnly(), psql:MSSQL_SPECIFICS), + [VALUE_SET_COMPOSE_INCLUDE]: check new (dbClient, self.metadata.get(VALUE_SET_COMPOSE_INCLUDE).cloneReadOnly(), psql:MSSQL_SPECIFICS), + [VALUE_SET_COMPOSE_INCLUDE_VALUE_SET]: check new (dbClient, self.metadata.get(VALUE_SET_COMPOSE_INCLUDE_VALUE_SET).cloneReadOnly(), psql:MSSQL_SPECIFICS), + [VALUE_SET_COMPOSE_INCLUDE_CONCEPT]: check new (dbClient, self.metadata.get(VALUE_SET_COMPOSE_INCLUDE_CONCEPT).cloneReadOnly(), psql:MSSQL_SPECIFICS) + }; + } + + isolated resource function get codesystems(CodeSystemTargetType targetType = <>, sql:ParameterizedQuery whereClause = ``, sql:ParameterizedQuery orderByClause = ``, sql:ParameterizedQuery limitClause = ``, sql:ParameterizedQuery groupByClause = ``) returns stream = @java:Method { + 'class: "io.ballerina.stdlib.persist.sql.datastore.MSSQLProcessor", + name: "query" + } external; + + isolated resource function get codesystems/[int codeSystemId](CodeSystemTargetType targetType = <>) returns targetType|persist:Error = @java:Method { + 'class: "io.ballerina.stdlib.persist.sql.datastore.MSSQLProcessor", + name: "queryOne" + } external; + + isolated resource function post codesystems(CodeSystemInsert[] data) returns int[]|persist:Error { + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(CODE_SYSTEM); + } + sql:ExecutionResult[] result = check sqlClient.runBatchInsertQuery(data); + return from sql:ExecutionResult inserted in result + where inserted.lastInsertId != () + select inserted.lastInsertId; + } + + isolated resource function put codesystems/[int codeSystemId](CodeSystemUpdate value) returns CodeSystem|persist:Error { + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(CODE_SYSTEM); + } + _ = check sqlClient.runUpdateQuery(codeSystemId, value); + return self->/codesystems/[codeSystemId].get(); + } + + isolated resource function delete codesystems/[int codeSystemId]() returns CodeSystem|persist:Error { + CodeSystem result = check self->/codesystems/[codeSystemId].get(); + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(CODE_SYSTEM); + } + _ = check sqlClient.runDeleteQuery(codeSystemId); + return result; + } + + isolated resource function get concepts(ConceptTargetType targetType = <>, sql:ParameterizedQuery whereClause = ``, sql:ParameterizedQuery orderByClause = ``, sql:ParameterizedQuery limitClause = ``, sql:ParameterizedQuery groupByClause = ``) returns stream = @java:Method { + 'class: "io.ballerina.stdlib.persist.sql.datastore.MSSQLProcessor", + name: "query" + } external; + + isolated resource function get concepts/[int conceptId](ConceptTargetType targetType = <>) returns targetType|persist:Error = @java:Method { + 'class: "io.ballerina.stdlib.persist.sql.datastore.MSSQLProcessor", + name: "queryOne" + } external; + + isolated resource function post concepts(ConceptInsert[] data) returns int[]|persist:Error { + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(CONCEPT); + } + sql:ExecutionResult[] result = check sqlClient.runBatchInsertQuery(data); + return from sql:ExecutionResult inserted in result + where inserted.lastInsertId != () + select inserted.lastInsertId; + } + + isolated resource function put concepts/[int conceptId](ConceptUpdate value) returns Concept|persist:Error { + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(CONCEPT); + } + _ = check sqlClient.runUpdateQuery(conceptId, value); + return self->/concepts/[conceptId].get(); + } + + isolated resource function delete concepts/[int conceptId]() returns Concept|persist:Error { + Concept result = check self->/concepts/[conceptId].get(); + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(CONCEPT); + } + _ = check sqlClient.runDeleteQuery(conceptId); + return result; + } + + isolated resource function get valuesets(ValueSetTargetType targetType = <>, sql:ParameterizedQuery whereClause = ``, sql:ParameterizedQuery orderByClause = ``, sql:ParameterizedQuery limitClause = ``, sql:ParameterizedQuery groupByClause = ``) returns stream = @java:Method { + 'class: "io.ballerina.stdlib.persist.sql.datastore.MSSQLProcessor", + name: "query" + } external; + + isolated resource function get valuesets/[int valueSetId](ValueSetTargetType targetType = <>) returns targetType|persist:Error = @java:Method { + 'class: "io.ballerina.stdlib.persist.sql.datastore.MSSQLProcessor", + name: "queryOne" + } external; + + isolated resource function post valuesets(ValueSetInsert[] data) returns int[]|persist:Error { + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(VALUE_SET); + } + sql:ExecutionResult[] result = check sqlClient.runBatchInsertQuery(data); + return from sql:ExecutionResult inserted in result + where inserted.lastInsertId != () + select inserted.lastInsertId; + } + + isolated resource function put valuesets/[int valueSetId](ValueSetUpdate value) returns ValueSet|persist:Error { + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(VALUE_SET); + } + _ = check sqlClient.runUpdateQuery(valueSetId, value); + return self->/valuesets/[valueSetId].get(); + } + + isolated resource function delete valuesets/[int valueSetId]() returns ValueSet|persist:Error { + ValueSet result = check self->/valuesets/[valueSetId].get(); + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(VALUE_SET); + } + _ = check sqlClient.runDeleteQuery(valueSetId); + return result; + } + + isolated resource function get valuesetcomposeincludes(ValueSetComposeIncludeTargetType targetType = <>, sql:ParameterizedQuery whereClause = ``, sql:ParameterizedQuery orderByClause = ``, sql:ParameterizedQuery limitClause = ``, sql:ParameterizedQuery groupByClause = ``) returns stream = @java:Method { + 'class: "io.ballerina.stdlib.persist.sql.datastore.MSSQLProcessor", + name: "query" + } external; + + isolated resource function get valuesetcomposeincludes/[int valueSetComposeIncludeId](ValueSetComposeIncludeTargetType targetType = <>) returns targetType|persist:Error = @java:Method { + 'class: "io.ballerina.stdlib.persist.sql.datastore.MSSQLProcessor", + name: "queryOne" + } external; + + isolated resource function post valuesetcomposeincludes(ValueSetComposeIncludeInsert[] data) returns int[]|persist:Error { + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(VALUE_SET_COMPOSE_INCLUDE); + } + sql:ExecutionResult[] result = check sqlClient.runBatchInsertQuery(data); + return from sql:ExecutionResult inserted in result + where inserted.lastInsertId != () + select inserted.lastInsertId; + } + + isolated resource function put valuesetcomposeincludes/[int valueSetComposeIncludeId](ValueSetComposeIncludeUpdate value) returns ValueSetComposeInclude|persist:Error { + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(VALUE_SET_COMPOSE_INCLUDE); + } + _ = check sqlClient.runUpdateQuery(valueSetComposeIncludeId, value); + return self->/valuesetcomposeincludes/[valueSetComposeIncludeId].get(); + } + + isolated resource function delete valuesetcomposeincludes/[int valueSetComposeIncludeId]() returns ValueSetComposeInclude|persist:Error { + ValueSetComposeInclude result = check self->/valuesetcomposeincludes/[valueSetComposeIncludeId].get(); + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(VALUE_SET_COMPOSE_INCLUDE); + } + _ = check sqlClient.runDeleteQuery(valueSetComposeIncludeId); + return result; + } + + isolated resource function get valuesetcomposeincludevaluesets(ValueSetComposeIncludeValueSetTargetType targetType = <>, sql:ParameterizedQuery whereClause = ``, sql:ParameterizedQuery orderByClause = ``, sql:ParameterizedQuery limitClause = ``, sql:ParameterizedQuery groupByClause = ``) returns stream = @java:Method { + 'class: "io.ballerina.stdlib.persist.sql.datastore.MSSQLProcessor", + name: "query" + } external; + + isolated resource function get valuesetcomposeincludevaluesets/[int valueSetComposeIncludeValueSetId](ValueSetComposeIncludeValueSetTargetType targetType = <>) returns targetType|persist:Error = @java:Method { + 'class: "io.ballerina.stdlib.persist.sql.datastore.MSSQLProcessor", + name: "queryOne" + } external; + + isolated resource function post valuesetcomposeincludevaluesets(ValueSetComposeIncludeValueSetInsert[] data) returns int[]|persist:Error { + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(VALUE_SET_COMPOSE_INCLUDE_VALUE_SET); + } + sql:ExecutionResult[] result = check sqlClient.runBatchInsertQuery(data); + return from sql:ExecutionResult inserted in result + where inserted.lastInsertId != () + select inserted.lastInsertId; + } + + isolated resource function put valuesetcomposeincludevaluesets/[int valueSetComposeIncludeValueSetId](ValueSetComposeIncludeValueSetUpdate value) returns ValueSetComposeIncludeValueSet|persist:Error { + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(VALUE_SET_COMPOSE_INCLUDE_VALUE_SET); + } + _ = check sqlClient.runUpdateQuery(valueSetComposeIncludeValueSetId, value); + return self->/valuesetcomposeincludevaluesets/[valueSetComposeIncludeValueSetId].get(); + } + + isolated resource function delete valuesetcomposeincludevaluesets/[int valueSetComposeIncludeValueSetId]() returns ValueSetComposeIncludeValueSet|persist:Error { + ValueSetComposeIncludeValueSet result = check self->/valuesetcomposeincludevaluesets/[valueSetComposeIncludeValueSetId].get(); + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(VALUE_SET_COMPOSE_INCLUDE_VALUE_SET); + } + _ = check sqlClient.runDeleteQuery(valueSetComposeIncludeValueSetId); + return result; + } + + isolated resource function get valuesetcomposeincludeconcepts(ValueSetComposeIncludeConceptTargetType targetType = <>, sql:ParameterizedQuery whereClause = ``, sql:ParameterizedQuery orderByClause = ``, sql:ParameterizedQuery limitClause = ``, sql:ParameterizedQuery groupByClause = ``) returns stream = @java:Method { + 'class: "io.ballerina.stdlib.persist.sql.datastore.MSSQLProcessor", + name: "query" + } external; + + isolated resource function get valuesetcomposeincludeconcepts/[int valueSetComposeIncludeConceptId](ValueSetComposeIncludeConceptTargetType targetType = <>) returns targetType|persist:Error = @java:Method { + 'class: "io.ballerina.stdlib.persist.sql.datastore.MSSQLProcessor", + name: "queryOne" + } external; + + isolated resource function post valuesetcomposeincludeconcepts(ValueSetComposeIncludeConceptInsert[] data) returns int[]|persist:Error { + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(VALUE_SET_COMPOSE_INCLUDE_CONCEPT); + } + sql:ExecutionResult[] result = check sqlClient.runBatchInsertQuery(data); + return from sql:ExecutionResult inserted in result + where inserted.lastInsertId != () + select inserted.lastInsertId; + } + + isolated resource function put valuesetcomposeincludeconcepts/[int valueSetComposeIncludeConceptId](ValueSetComposeIncludeConceptUpdate value) returns ValueSetComposeIncludeConcept|persist:Error { + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(VALUE_SET_COMPOSE_INCLUDE_CONCEPT); + } + _ = check sqlClient.runUpdateQuery(valueSetComposeIncludeConceptId, value); + return self->/valuesetcomposeincludeconcepts/[valueSetComposeIncludeConceptId].get(); + } + + isolated resource function delete valuesetcomposeincludeconcepts/[int valueSetComposeIncludeConceptId]() returns ValueSetComposeIncludeConcept|persist:Error { + ValueSetComposeIncludeConcept result = check self->/valuesetcomposeincludeconcepts/[valueSetComposeIncludeConceptId].get(); + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(VALUE_SET_COMPOSE_INCLUDE_CONCEPT); + } + _ = check sqlClient.runDeleteQuery(valueSetComposeIncludeConceptId); + return result; + } + + remote isolated function queryNativeSQL(sql:ParameterizedQuery sqlQuery, typedesc rowType = <>) returns stream = @java:Method { + 'class: "io.ballerina.stdlib.persist.sql.datastore.MSSQLProcessor" + } external; + + remote isolated function executeNativeSQL(sql:ParameterizedQuery sqlQuery) returns psql:ExecutionResult|persist:Error = @java:Method { + 'class: "io.ballerina.stdlib.persist.sql.datastore.MSSQLProcessor" + } external; + + public isolated function close() returns persist:Error? { + error? result = self.dbClient.close(); + if result is error { + return error(result.message()); + } + return result; + } +} + diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_114/modules/mssql_entities/persist_db_config.bal b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_114/modules/mssql_entities/persist_db_config.bal new file mode 100644 index 000000000..f2872db3b --- /dev/null +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_114/modules/mssql_entities/persist_db_config.bal @@ -0,0 +1,15 @@ +// AUTO-GENERATED FILE. DO NOT MODIFY. + +// This file is an auto-generated file by Ballerina persistence layer. +// It should not be modified by hand. + +import ballerinax/mssql; + +configurable int port = ?; +configurable string host = ?; +configurable string user = ?; +configurable string database = ?; +configurable string password = ?; +configurable mssql:Options & readonly connectionOptions = {}; +configurable string? defaultSchema = (); + diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_114/modules/mssql_entities/persist_types.bal b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_114/modules/mssql_entities/persist_types.bal new file mode 100644 index 000000000..3a8fc2797 --- /dev/null +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_114/modules/mssql_entities/persist_types.bal @@ -0,0 +1,265 @@ +// AUTO-GENERATED FILE. DO NOT MODIFY. + +// This file is an auto-generated file by Ballerina persistence layer for model. +// It should not be modified by hand. + +public type CodeSystem record {| + readonly int codeSystemId; + string id; + string url; + string 'version; + string name; + string title; + string status; + string date; + string publisher; + byte[] codeSystem; + +|}; + +public type CodeSystemOptionalized record {| + int codeSystemId?; + string id?; + string url?; + string 'version?; + string name?; + string title?; + string status?; + string date?; + string publisher?; + byte[] codeSystem?; +|}; + +public type CodeSystemWithRelations record {| + *CodeSystemOptionalized; + ConceptOptionalized[] concepts?; +|}; + +public type CodeSystemTargetType typedesc; + +public type CodeSystemInsert record {| + string id; + string url; + string 'version; + string name; + string title; + string status; + string date; + string publisher; + byte[] codeSystem; +|}; + +public type CodeSystemUpdate record {| + string id?; + string url?; + string 'version?; + string name?; + string title?; + string status?; + string date?; + string publisher?; + byte[] codeSystem?; +|}; + +public type Concept record {| + readonly int conceptId; + string code; + byte[] concept; + int? parentConceptId; + int codesystemCodeSystemId; + +|}; + +public type ConceptOptionalized record {| + int conceptId?; + string code?; + byte[] concept?; + int? parentConceptId?; + int codesystemCodeSystemId?; +|}; + +public type ConceptWithRelations record {| + *ConceptOptionalized; + CodeSystemOptionalized codeSystem?; + ValueSetComposeIncludeConceptOptionalized[] valuesetcomposeincludeconcept?; +|}; + +public type ConceptTargetType typedesc; + +public type ConceptInsert record {| + string code; + byte[] concept; + int? parentConceptId; + int codesystemCodeSystemId; +|}; + +public type ConceptUpdate record {| + string code?; + byte[] concept?; + int? parentConceptId?; + int codesystemCodeSystemId?; +|}; + +public type ValueSet record {| + readonly int valueSetId; + string id; + string url; + string 'version; + string name; + string title; + string status; + string date; + string publisher; + byte[] valueSet; + +|}; + +public type ValueSetOptionalized record {| + int valueSetId?; + string id?; + string url?; + string 'version?; + string name?; + string title?; + string status?; + string date?; + string publisher?; + byte[] valueSet?; +|}; + +public type ValueSetWithRelations record {| + *ValueSetOptionalized; + ValueSetComposeIncludeOptionalized[] composes?; + ValueSetComposeIncludeValueSetOptionalized[] conceptsInValueSetConcepts?; +|}; + +public type ValueSetTargetType typedesc; + +public type ValueSetInsert record {| + string id; + string url; + string 'version; + string name; + string title; + string status; + string date; + string publisher; + byte[] valueSet; +|}; + +public type ValueSetUpdate record {| + string id?; + string url?; + string 'version?; + string name?; + string title?; + string status?; + string date?; + string publisher?; + byte[] valueSet?; +|}; + +public type ValueSetComposeInclude record {| + readonly int valueSetComposeIncludeId; + boolean systemFlag; + boolean valueSetFlag; + boolean conceptFlag; + int valuesetValueSetId; + + int? codeSystemId; +|}; + +public type ValueSetComposeIncludeOptionalized record {| + int valueSetComposeIncludeId?; + boolean systemFlag?; + boolean valueSetFlag?; + boolean conceptFlag?; + int valuesetValueSetId?; + int? codeSystemId?; +|}; + +public type ValueSetComposeIncludeWithRelations record {| + *ValueSetComposeIncludeOptionalized; + ValueSetOptionalized valueSet?; + ValueSetComposeIncludeValueSetOptionalized[] valuesetcomposeincludevalueset?; + ValueSetComposeIncludeConceptOptionalized[] valuesetcomposeincludeconcept?; +|}; + +public type ValueSetComposeIncludeTargetType typedesc; + +public type ValueSetComposeIncludeInsert record {| + boolean systemFlag; + boolean valueSetFlag; + boolean conceptFlag; + int valuesetValueSetId; + int? codeSystemId; +|}; + +public type ValueSetComposeIncludeUpdate record {| + boolean systemFlag?; + boolean valueSetFlag?; + boolean conceptFlag?; + int valuesetValueSetId?; + int? codeSystemId?; +|}; + +public type ValueSetComposeIncludeValueSet record {| + readonly int valueSetComposeIncludeValueSetId; + int valuesetcomposeValueSetComposeIncludeId; + int valuesetValueSetId; +|}; + +public type ValueSetComposeIncludeValueSetOptionalized record {| + int valueSetComposeIncludeValueSetId?; + int valuesetcomposeValueSetComposeIncludeId?; + int valuesetValueSetId?; +|}; + +public type ValueSetComposeIncludeValueSetWithRelations record {| + *ValueSetComposeIncludeValueSetOptionalized; + ValueSetComposeIncludeOptionalized valuesetCompose?; + ValueSetOptionalized valueset?; +|}; + +public type ValueSetComposeIncludeValueSetTargetType typedesc; + +public type ValueSetComposeIncludeValueSetInsert record {| + int valuesetcomposeValueSetComposeIncludeId; + int valuesetValueSetId; +|}; + +public type ValueSetComposeIncludeValueSetUpdate record {| + int valuesetcomposeValueSetComposeIncludeId?; + int valuesetValueSetId?; +|}; + +public type ValueSetComposeIncludeConcept record {| + readonly int valueSetComposeIncludeConceptId; + int valuesetcomposeValueSetComposeIncludeId; + int conceptConceptId; +|}; + +public type ValueSetComposeIncludeConceptOptionalized record {| + int valueSetComposeIncludeConceptId?; + int valuesetcomposeValueSetComposeIncludeId?; + int conceptConceptId?; +|}; + +public type ValueSetComposeIncludeConceptWithRelations record {| + *ValueSetComposeIncludeConceptOptionalized; + ValueSetComposeIncludeOptionalized valuesetCompose?; + ConceptOptionalized concept?; +|}; + +public type ValueSetComposeIncludeConceptTargetType typedesc; + +public type ValueSetComposeIncludeConceptInsert record {| + int valuesetcomposeValueSetComposeIncludeId; + int conceptConceptId; +|}; + +public type ValueSetComposeIncludeConceptUpdate record {| + int valuesetcomposeValueSetComposeIncludeId?; + int conceptConceptId?; +|}; + diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_114/modules/mssql_entities/script.sql b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_114/modules/mssql_entities/script.sql new file mode 100644 index 000000000..778f87c1d --- /dev/null +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_114/modules/mssql_entities/script.sql @@ -0,0 +1,80 @@ +-- AUTO-GENERATED FILE. + +-- This file is an auto-generated file by Ballerina persistence layer for model. +-- Please verify the generated scripts and execute them against the target DB server. + +DROP TABLE IF EXISTS [valueset_compose_include_concepts]; +DROP TABLE IF EXISTS [valueset_compose_include_value_sets]; +DROP TABLE IF EXISTS [concepts]; +DROP TABLE IF EXISTS [valueset_compose_includes]; +DROP TABLE IF EXISTS [codesystems]; +DROP TABLE IF EXISTS [valuesets]; + +CREATE TABLE [valuesets] ( + [valueSetId] INT IDENTITY(1,1), + [id] VARCHAR(191) NOT NULL, + [url] VARCHAR(191) NOT NULL, + [version] VARCHAR(191) NOT NULL, + [name] VARCHAR(191) NOT NULL, + [title] VARCHAR(191) NOT NULL, + [status] VARCHAR(191) NOT NULL, + [date] VARCHAR(191) NOT NULL, + [publisher] VARCHAR(191) NOT NULL, + [valueSet] VARBINARY(MAX) NOT NULL, + PRIMARY KEY([valueSetId]) +); + +CREATE TABLE [codesystems] ( + [codeSystemId] INT IDENTITY(1,1), + [id] VARCHAR(191) NOT NULL, + [url] VARCHAR(191) NOT NULL, + [version] VARCHAR(191) NOT NULL, + [name] VARCHAR(191) NOT NULL, + [title] VARCHAR(191) NOT NULL, + [status] VARCHAR(191) NOT NULL, + [date] VARCHAR(191) NOT NULL, + [publisher] VARCHAR(191) NOT NULL, + [codeSystem] VARBINARY(MAX) NOT NULL, + PRIMARY KEY([codeSystemId]) +); + +CREATE TABLE [valueset_compose_includes] ( + [valueSetComposeIncludeId] INT IDENTITY(1,1), + [systemFlag] BIT NOT NULL, + [valueSetFlag] BIT NOT NULL, + [conceptFlag] BIT NOT NULL, + [codeSystemId] INT, + [valuesetValueSetId] INT NOT NULL, + FOREIGN KEY([valuesetValueSetId]) REFERENCES [valuesets]([valueSetId]), + PRIMARY KEY([valueSetComposeIncludeId]) +); + +CREATE TABLE [concepts] ( + [conceptId] INT IDENTITY(1,1), + [code] VARCHAR(191) NOT NULL, + [concept] VARBINARY(MAX) NOT NULL, + [parentConceptId] INT, + [codesystemCodeSystemId] INT NOT NULL, + FOREIGN KEY([codesystemCodeSystemId]) REFERENCES [codesystems]([codeSystemId]), + PRIMARY KEY([conceptId]) +); + +CREATE TABLE [valueset_compose_include_value_sets] ( + [valueSetComposeIncludeValueSetId] INT IDENTITY(1,1), + [valuesetcomposeValueSetComposeIncludeId] INT NOT NULL, + FOREIGN KEY([valuesetcomposeValueSetComposeIncludeId]) REFERENCES [valueset_compose_includes]([valueSetComposeIncludeId]), + [valuesetValueSetId] INT NOT NULL, + FOREIGN KEY([valuesetValueSetId]) REFERENCES [valuesets]([valueSetId]), + PRIMARY KEY([valueSetComposeIncludeValueSetId]) +); + +CREATE TABLE [valueset_compose_include_concepts] ( + [valueSetComposeIncludeConceptId] INT IDENTITY(1,1), + [valuesetcomposeValueSetComposeIncludeId] INT NOT NULL, + FOREIGN KEY([valuesetcomposeValueSetComposeIncludeId]) REFERENCES [valueset_compose_includes]([valueSetComposeIncludeId]), + [conceptConceptId] INT NOT NULL, + FOREIGN KEY([conceptConceptId]) REFERENCES [concepts]([conceptId]), + PRIMARY KEY([valueSetComposeIncludeConceptId]) +); + + diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_114/modules/postgresql_entities/persist_client.bal b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_114/modules/postgresql_entities/persist_client.bal new file mode 100644 index 000000000..13d4f17f8 --- /dev/null +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_114/modules/postgresql_entities/persist_client.bal @@ -0,0 +1,492 @@ +// AUTO-GENERATED FILE. DO NOT MODIFY. + +// This file is an auto-generated file by Ballerina persistence layer for model. +// It should not be modified by hand. + +import ballerina/jballerina.java; +import ballerina/persist; +import ballerina/sql; +import ballerinax/persist.sql as psql; +import ballerinax/postgresql; +import ballerinax/postgresql.driver as _; + +const CODE_SYSTEM = "codesystems"; +const CONCEPT = "concepts"; +const VALUE_SET = "valuesets"; +const VALUE_SET_COMPOSE_INCLUDE = "valuesetcomposeincludes"; +const VALUE_SET_COMPOSE_INCLUDE_VALUE_SET = "valuesetcomposeincludevaluesets"; +const VALUE_SET_COMPOSE_INCLUDE_CONCEPT = "valuesetcomposeincludeconcepts"; + +public isolated client class Client { + *persist:AbstractPersistClient; + + private final postgresql:Client dbClient; + + private final map persistClients; + + private final record {|psql:SQLMetadata...;|} metadata = { + [CODE_SYSTEM]: { + entityName: "CodeSystem", + tableName: "codesystems", + fieldMetadata: { + codeSystemId: {columnName: "codeSystemId", dbGenerated: true}, + id: {columnName: "id"}, + url: {columnName: "url"}, + 'version: {columnName: "version"}, + name: {columnName: "name"}, + title: {columnName: "title"}, + status: {columnName: "status"}, + date: {columnName: "date"}, + publisher: {columnName: "publisher"}, + codeSystem: {columnName: "codeSystem"}, + "concepts[].conceptId": {relation: {entityName: "concepts", refField: "conceptId"}}, + "concepts[].code": {relation: {entityName: "concepts", refField: "code"}}, + "concepts[].concept": {relation: {entityName: "concepts", refField: "concept"}}, + "concepts[].parentConceptId": {relation: {entityName: "concepts", refField: "parentConceptId"}}, + "concepts[].codesystemCodeSystemId": {relation: {entityName: "concepts", refField: "codesystemCodeSystemId"}} + }, + keyFields: ["codeSystemId"], + joinMetadata: {concepts: {entity: Concept, fieldName: "concepts", refTable: "concepts", refColumns: ["codesystemCodeSystemId"], joinColumns: ["codeSystemId"], 'type: psql:MANY_TO_ONE}} + }, + [CONCEPT]: { + entityName: "Concept", + tableName: "concepts", + fieldMetadata: { + conceptId: {columnName: "conceptId", dbGenerated: true}, + code: {columnName: "code"}, + concept: {columnName: "concept"}, + parentConceptId: {columnName: "parentConceptId"}, + codesystemCodeSystemId: {columnName: "codesystemCodeSystemId"}, + "codeSystem.codeSystemId": {relation: {entityName: "codeSystem", refField: "codeSystemId"}}, + "codeSystem.id": {relation: {entityName: "codeSystem", refField: "id"}}, + "codeSystem.url": {relation: {entityName: "codeSystem", refField: "url"}}, + "codeSystem.version": {relation: {entityName: "codeSystem", refField: "version", refColumn: "version"}}, + "codeSystem.name": {relation: {entityName: "codeSystem", refField: "name"}}, + "codeSystem.title": {relation: {entityName: "codeSystem", refField: "title"}}, + "codeSystem.status": {relation: {entityName: "codeSystem", refField: "status"}}, + "codeSystem.date": {relation: {entityName: "codeSystem", refField: "date"}}, + "codeSystem.publisher": {relation: {entityName: "codeSystem", refField: "publisher"}}, + "codeSystem.codeSystem": {relation: {entityName: "codeSystem", refField: "codeSystem"}}, + "valuesetcomposeincludeconcept[].valueSetComposeIncludeConceptId": {relation: {entityName: "valuesetcomposeincludeconcept", refField: "valueSetComposeIncludeConceptId"}}, + "valuesetcomposeincludeconcept[].valuesetcomposeValueSetComposeIncludeId": {relation: {entityName: "valuesetcomposeincludeconcept", refField: "valuesetcomposeValueSetComposeIncludeId"}}, + "valuesetcomposeincludeconcept[].conceptConceptId": {relation: {entityName: "valuesetcomposeincludeconcept", refField: "conceptConceptId"}} + }, + keyFields: ["conceptId"], + joinMetadata: { + codeSystem: {entity: CodeSystem, fieldName: "codeSystem", refTable: "codesystems", refColumns: ["codeSystemId"], joinColumns: ["codesystemCodeSystemId"], 'type: psql:ONE_TO_MANY}, + valuesetcomposeincludeconcept: {entity: ValueSetComposeIncludeConcept, fieldName: "valuesetcomposeincludeconcept", refTable: "valueset_compose_include_concepts", refColumns: ["conceptConceptId"], joinColumns: ["conceptId"], 'type: psql:MANY_TO_ONE} + } + }, + [VALUE_SET]: { + entityName: "ValueSet", + tableName: "valuesets", + fieldMetadata: { + valueSetId: {columnName: "valueSetId", dbGenerated: true}, + id: {columnName: "id"}, + url: {columnName: "url"}, + 'version: {columnName: "version"}, + name: {columnName: "name"}, + title: {columnName: "title"}, + status: {columnName: "status"}, + date: {columnName: "date"}, + publisher: {columnName: "publisher"}, + valueSet: {columnName: "valueSet"}, + "composes[].valueSetComposeIncludeId": {relation: {entityName: "composes", refField: "valueSetComposeIncludeId"}}, + "composes[].systemFlag": {relation: {entityName: "composes", refField: "systemFlag"}}, + "composes[].valueSetFlag": {relation: {entityName: "composes", refField: "valueSetFlag"}}, + "composes[].conceptFlag": {relation: {entityName: "composes", refField: "conceptFlag"}}, + "composes[].valuesetValueSetId": {relation: {entityName: "composes", refField: "valuesetValueSetId"}}, + "composes[].codeSystemId": {relation: {entityName: "composes", refField: "codeSystemId"}}, + "conceptsInValueSetConcepts[].valueSetComposeIncludeValueSetId": {relation: {entityName: "conceptsInValueSetConcepts", refField: "valueSetComposeIncludeValueSetId"}}, + "conceptsInValueSetConcepts[].valuesetcomposeValueSetComposeIncludeId": {relation: {entityName: "conceptsInValueSetConcepts", refField: "valuesetcomposeValueSetComposeIncludeId"}}, + "conceptsInValueSetConcepts[].valuesetValueSetId": {relation: {entityName: "conceptsInValueSetConcepts", refField: "valuesetValueSetId"}} + }, + keyFields: ["valueSetId"], + joinMetadata: { + composes: {entity: ValueSetComposeInclude, fieldName: "composes", refTable: "valueset_compose_includes", refColumns: ["valuesetValueSetId"], joinColumns: ["valueSetId"], 'type: psql:MANY_TO_ONE}, + conceptsInValueSetConcepts: {entity: ValueSetComposeIncludeValueSet, fieldName: "conceptsInValueSetConcepts", refTable: "valueset_compose_include_value_sets", refColumns: ["valuesetValueSetId"], joinColumns: ["valueSetId"], 'type: psql:MANY_TO_ONE} + } + }, + [VALUE_SET_COMPOSE_INCLUDE]: { + entityName: "ValueSetComposeInclude", + tableName: "valueset_compose_includes", + fieldMetadata: { + valueSetComposeIncludeId: {columnName: "valueSetComposeIncludeId", dbGenerated: true}, + systemFlag: {columnName: "systemFlag"}, + valueSetFlag: {columnName: "valueSetFlag"}, + conceptFlag: {columnName: "conceptFlag"}, + valuesetValueSetId: {columnName: "valuesetValueSetId"}, + codeSystemId: {columnName: "codeSystemId"}, + "valueSet.valueSetId": {relation: {entityName: "valueSet", refField: "valueSetId"}}, + "valueSet.id": {relation: {entityName: "valueSet", refField: "id"}}, + "valueSet.url": {relation: {entityName: "valueSet", refField: "url"}}, + "valueSet.version": {relation: {entityName: "valueSet", refField: "version", refColumn: "version"}}, + "valueSet.name": {relation: {entityName: "valueSet", refField: "name"}}, + "valueSet.title": {relation: {entityName: "valueSet", refField: "title"}}, + "valueSet.status": {relation: {entityName: "valueSet", refField: "status"}}, + "valueSet.date": {relation: {entityName: "valueSet", refField: "date"}}, + "valueSet.publisher": {relation: {entityName: "valueSet", refField: "publisher"}}, + "valueSet.valueSet": {relation: {entityName: "valueSet", refField: "valueSet"}}, + "valuesetcomposeincludevalueset[].valueSetComposeIncludeValueSetId": {relation: {entityName: "valuesetcomposeincludevalueset", refField: "valueSetComposeIncludeValueSetId"}}, + "valuesetcomposeincludevalueset[].valuesetcomposeValueSetComposeIncludeId": {relation: {entityName: "valuesetcomposeincludevalueset", refField: "valuesetcomposeValueSetComposeIncludeId"}}, + "valuesetcomposeincludevalueset[].valuesetValueSetId": {relation: {entityName: "valuesetcomposeincludevalueset", refField: "valuesetValueSetId"}}, + "valuesetcomposeincludeconcept[].valueSetComposeIncludeConceptId": {relation: {entityName: "valuesetcomposeincludeconcept", refField: "valueSetComposeIncludeConceptId"}}, + "valuesetcomposeincludeconcept[].valuesetcomposeValueSetComposeIncludeId": {relation: {entityName: "valuesetcomposeincludeconcept", refField: "valuesetcomposeValueSetComposeIncludeId"}}, + "valuesetcomposeincludeconcept[].conceptConceptId": {relation: {entityName: "valuesetcomposeincludeconcept", refField: "conceptConceptId"}} + }, + keyFields: ["valueSetComposeIncludeId"], + joinMetadata: { + valueSet: {entity: ValueSet, fieldName: "valueSet", refTable: "valuesets", refColumns: ["valueSetId"], joinColumns: ["valuesetValueSetId"], 'type: psql:ONE_TO_MANY}, + valuesetcomposeincludevalueset: {entity: ValueSetComposeIncludeValueSet, fieldName: "valuesetcomposeincludevalueset", refTable: "valueset_compose_include_value_sets", refColumns: ["valuesetcomposeValueSetComposeIncludeId"], joinColumns: ["valueSetComposeIncludeId"], 'type: psql:MANY_TO_ONE}, + valuesetcomposeincludeconcept: {entity: ValueSetComposeIncludeConcept, fieldName: "valuesetcomposeincludeconcept", refTable: "valueset_compose_include_concepts", refColumns: ["valuesetcomposeValueSetComposeIncludeId"], joinColumns: ["valueSetComposeIncludeId"], 'type: psql:MANY_TO_ONE} + } + }, + [VALUE_SET_COMPOSE_INCLUDE_VALUE_SET]: { + entityName: "ValueSetComposeIncludeValueSet", + tableName: "valueset_compose_include_value_sets", + fieldMetadata: { + valueSetComposeIncludeValueSetId: {columnName: "valueSetComposeIncludeValueSetId", dbGenerated: true}, + valuesetcomposeValueSetComposeIncludeId: {columnName: "valuesetcomposeValueSetComposeIncludeId"}, + valuesetValueSetId: {columnName: "valuesetValueSetId"}, + "valuesetCompose.valueSetComposeIncludeId": {relation: {entityName: "valuesetCompose", refField: "valueSetComposeIncludeId"}}, + "valuesetCompose.systemFlag": {relation: {entityName: "valuesetCompose", refField: "systemFlag"}}, + "valuesetCompose.valueSetFlag": {relation: {entityName: "valuesetCompose", refField: "valueSetFlag"}}, + "valuesetCompose.conceptFlag": {relation: {entityName: "valuesetCompose", refField: "conceptFlag"}}, + "valuesetCompose.valuesetValueSetId": {relation: {entityName: "valuesetCompose", refField: "valuesetValueSetId"}}, + "valuesetCompose.codeSystemId": {relation: {entityName: "valuesetCompose", refField: "codeSystemId"}}, + "valueset.valueSetId": {relation: {entityName: "valueset", refField: "valueSetId"}}, + "valueset.id": {relation: {entityName: "valueset", refField: "id"}}, + "valueset.url": {relation: {entityName: "valueset", refField: "url"}}, + "valueset.version": {relation: {entityName: "valueset", refField: "version", refColumn: "version"}}, + "valueset.name": {relation: {entityName: "valueset", refField: "name"}}, + "valueset.title": {relation: {entityName: "valueset", refField: "title"}}, + "valueset.status": {relation: {entityName: "valueset", refField: "status"}}, + "valueset.date": {relation: {entityName: "valueset", refField: "date"}}, + "valueset.publisher": {relation: {entityName: "valueset", refField: "publisher"}}, + "valueset.valueSet": {relation: {entityName: "valueset", refField: "valueSet"}} + }, + keyFields: ["valueSetComposeIncludeValueSetId"], + joinMetadata: { + valuesetCompose: {entity: ValueSetComposeInclude, fieldName: "valuesetCompose", refTable: "valueset_compose_includes", refColumns: ["valueSetComposeIncludeId"], joinColumns: ["valuesetcomposeValueSetComposeIncludeId"], 'type: psql:ONE_TO_MANY}, + valueset: {entity: ValueSet, fieldName: "valueset", refTable: "valuesets", refColumns: ["valueSetId"], joinColumns: ["valuesetValueSetId"], 'type: psql:ONE_TO_MANY} + } + }, + [VALUE_SET_COMPOSE_INCLUDE_CONCEPT]: { + entityName: "ValueSetComposeIncludeConcept", + tableName: "valueset_compose_include_concepts", + fieldMetadata: { + valueSetComposeIncludeConceptId: {columnName: "valueSetComposeIncludeConceptId", dbGenerated: true}, + valuesetcomposeValueSetComposeIncludeId: {columnName: "valuesetcomposeValueSetComposeIncludeId"}, + conceptConceptId: {columnName: "conceptConceptId"}, + "valuesetCompose.valueSetComposeIncludeId": {relation: {entityName: "valuesetCompose", refField: "valueSetComposeIncludeId"}}, + "valuesetCompose.systemFlag": {relation: {entityName: "valuesetCompose", refField: "systemFlag"}}, + "valuesetCompose.valueSetFlag": {relation: {entityName: "valuesetCompose", refField: "valueSetFlag"}}, + "valuesetCompose.conceptFlag": {relation: {entityName: "valuesetCompose", refField: "conceptFlag"}}, + "valuesetCompose.valuesetValueSetId": {relation: {entityName: "valuesetCompose", refField: "valuesetValueSetId"}}, + "valuesetCompose.codeSystemId": {relation: {entityName: "valuesetCompose", refField: "codeSystemId"}}, + "concept.conceptId": {relation: {entityName: "concept", refField: "conceptId"}}, + "concept.code": {relation: {entityName: "concept", refField: "code"}}, + "concept.concept": {relation: {entityName: "concept", refField: "concept"}}, + "concept.parentConceptId": {relation: {entityName: "concept", refField: "parentConceptId"}}, + "concept.codesystemCodeSystemId": {relation: {entityName: "concept", refField: "codesystemCodeSystemId"}} + }, + keyFields: ["valueSetComposeIncludeConceptId"], + joinMetadata: { + valuesetCompose: {entity: ValueSetComposeInclude, fieldName: "valuesetCompose", refTable: "valueset_compose_includes", refColumns: ["valueSetComposeIncludeId"], joinColumns: ["valuesetcomposeValueSetComposeIncludeId"], 'type: psql:ONE_TO_MANY}, + concept: {entity: Concept, fieldName: "concept", refTable: "concepts", refColumns: ["conceptId"], joinColumns: ["conceptConceptId"], 'type: psql:ONE_TO_MANY} + } + } + }; + + public isolated function init() returns persist:Error? { + postgresql:Client|error dbClient = new (host = host, username = user, password = password, database = database, port = port, options = connectionOptions); + if dbClient is error { + return error(dbClient.message()); + } + self.dbClient = dbClient; + if defaultSchema != () { + lock { + foreach string key in self.metadata.keys() { + psql:SQLMetadata metadata = self.metadata.get(key); + if metadata.schemaName == () { + metadata.schemaName = defaultSchema; + } + map? joinMetadataMap = metadata.joinMetadata; + if joinMetadataMap == () { + continue; + } + foreach [string, psql:JoinMetadata] [_, joinMetadata] in joinMetadataMap.entries() { + if joinMetadata.refSchema == () { + joinMetadata.refSchema = defaultSchema; + } + } + } + } + } + self.persistClients = { + [CODE_SYSTEM]: check new (dbClient, self.metadata.get(CODE_SYSTEM).cloneReadOnly(), psql:POSTGRESQL_SPECIFICS), + [CONCEPT]: check new (dbClient, self.metadata.get(CONCEPT).cloneReadOnly(), psql:POSTGRESQL_SPECIFICS), + [VALUE_SET]: check new (dbClient, self.metadata.get(VALUE_SET).cloneReadOnly(), psql:POSTGRESQL_SPECIFICS), + [VALUE_SET_COMPOSE_INCLUDE]: check new (dbClient, self.metadata.get(VALUE_SET_COMPOSE_INCLUDE).cloneReadOnly(), psql:POSTGRESQL_SPECIFICS), + [VALUE_SET_COMPOSE_INCLUDE_VALUE_SET]: check new (dbClient, self.metadata.get(VALUE_SET_COMPOSE_INCLUDE_VALUE_SET).cloneReadOnly(), psql:POSTGRESQL_SPECIFICS), + [VALUE_SET_COMPOSE_INCLUDE_CONCEPT]: check new (dbClient, self.metadata.get(VALUE_SET_COMPOSE_INCLUDE_CONCEPT).cloneReadOnly(), psql:POSTGRESQL_SPECIFICS) + }; + } + + isolated resource function get codesystems(CodeSystemTargetType targetType = <>, sql:ParameterizedQuery whereClause = ``, sql:ParameterizedQuery orderByClause = ``, sql:ParameterizedQuery limitClause = ``, sql:ParameterizedQuery groupByClause = ``) returns stream = @java:Method { + 'class: "io.ballerina.stdlib.persist.sql.datastore.PostgreSQLProcessor", + name: "query" + } external; + + isolated resource function get codesystems/[int codeSystemId](CodeSystemTargetType targetType = <>) returns targetType|persist:Error = @java:Method { + 'class: "io.ballerina.stdlib.persist.sql.datastore.PostgreSQLProcessor", + name: "queryOne" + } external; + + isolated resource function post codesystems(CodeSystemInsert[] data) returns int[]|persist:Error { + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(CODE_SYSTEM); + } + sql:ExecutionResult[] result = check sqlClient.runBatchInsertQuery(data); + return from sql:ExecutionResult inserted in result + where inserted.lastInsertId != () + select inserted.lastInsertId; + } + + isolated resource function put codesystems/[int codeSystemId](CodeSystemUpdate value) returns CodeSystem|persist:Error { + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(CODE_SYSTEM); + } + _ = check sqlClient.runUpdateQuery(codeSystemId, value); + return self->/codesystems/[codeSystemId].get(); + } + + isolated resource function delete codesystems/[int codeSystemId]() returns CodeSystem|persist:Error { + CodeSystem result = check self->/codesystems/[codeSystemId].get(); + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(CODE_SYSTEM); + } + _ = check sqlClient.runDeleteQuery(codeSystemId); + return result; + } + + isolated resource function get concepts(ConceptTargetType targetType = <>, sql:ParameterizedQuery whereClause = ``, sql:ParameterizedQuery orderByClause = ``, sql:ParameterizedQuery limitClause = ``, sql:ParameterizedQuery groupByClause = ``) returns stream = @java:Method { + 'class: "io.ballerina.stdlib.persist.sql.datastore.PostgreSQLProcessor", + name: "query" + } external; + + isolated resource function get concepts/[int conceptId](ConceptTargetType targetType = <>) returns targetType|persist:Error = @java:Method { + 'class: "io.ballerina.stdlib.persist.sql.datastore.PostgreSQLProcessor", + name: "queryOne" + } external; + + isolated resource function post concepts(ConceptInsert[] data) returns int[]|persist:Error { + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(CONCEPT); + } + sql:ExecutionResult[] result = check sqlClient.runBatchInsertQuery(data); + return from sql:ExecutionResult inserted in result + where inserted.lastInsertId != () + select inserted.lastInsertId; + } + + isolated resource function put concepts/[int conceptId](ConceptUpdate value) returns Concept|persist:Error { + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(CONCEPT); + } + _ = check sqlClient.runUpdateQuery(conceptId, value); + return self->/concepts/[conceptId].get(); + } + + isolated resource function delete concepts/[int conceptId]() returns Concept|persist:Error { + Concept result = check self->/concepts/[conceptId].get(); + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(CONCEPT); + } + _ = check sqlClient.runDeleteQuery(conceptId); + return result; + } + + isolated resource function get valuesets(ValueSetTargetType targetType = <>, sql:ParameterizedQuery whereClause = ``, sql:ParameterizedQuery orderByClause = ``, sql:ParameterizedQuery limitClause = ``, sql:ParameterizedQuery groupByClause = ``) returns stream = @java:Method { + 'class: "io.ballerina.stdlib.persist.sql.datastore.PostgreSQLProcessor", + name: "query" + } external; + + isolated resource function get valuesets/[int valueSetId](ValueSetTargetType targetType = <>) returns targetType|persist:Error = @java:Method { + 'class: "io.ballerina.stdlib.persist.sql.datastore.PostgreSQLProcessor", + name: "queryOne" + } external; + + isolated resource function post valuesets(ValueSetInsert[] data) returns int[]|persist:Error { + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(VALUE_SET); + } + sql:ExecutionResult[] result = check sqlClient.runBatchInsertQuery(data); + return from sql:ExecutionResult inserted in result + where inserted.lastInsertId != () + select inserted.lastInsertId; + } + + isolated resource function put valuesets/[int valueSetId](ValueSetUpdate value) returns ValueSet|persist:Error { + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(VALUE_SET); + } + _ = check sqlClient.runUpdateQuery(valueSetId, value); + return self->/valuesets/[valueSetId].get(); + } + + isolated resource function delete valuesets/[int valueSetId]() returns ValueSet|persist:Error { + ValueSet result = check self->/valuesets/[valueSetId].get(); + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(VALUE_SET); + } + _ = check sqlClient.runDeleteQuery(valueSetId); + return result; + } + + isolated resource function get valuesetcomposeincludes(ValueSetComposeIncludeTargetType targetType = <>, sql:ParameterizedQuery whereClause = ``, sql:ParameterizedQuery orderByClause = ``, sql:ParameterizedQuery limitClause = ``, sql:ParameterizedQuery groupByClause = ``) returns stream = @java:Method { + 'class: "io.ballerina.stdlib.persist.sql.datastore.PostgreSQLProcessor", + name: "query" + } external; + + isolated resource function get valuesetcomposeincludes/[int valueSetComposeIncludeId](ValueSetComposeIncludeTargetType targetType = <>) returns targetType|persist:Error = @java:Method { + 'class: "io.ballerina.stdlib.persist.sql.datastore.PostgreSQLProcessor", + name: "queryOne" + } external; + + isolated resource function post valuesetcomposeincludes(ValueSetComposeIncludeInsert[] data) returns int[]|persist:Error { + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(VALUE_SET_COMPOSE_INCLUDE); + } + sql:ExecutionResult[] result = check sqlClient.runBatchInsertQuery(data); + return from sql:ExecutionResult inserted in result + where inserted.lastInsertId != () + select inserted.lastInsertId; + } + + isolated resource function put valuesetcomposeincludes/[int valueSetComposeIncludeId](ValueSetComposeIncludeUpdate value) returns ValueSetComposeInclude|persist:Error { + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(VALUE_SET_COMPOSE_INCLUDE); + } + _ = check sqlClient.runUpdateQuery(valueSetComposeIncludeId, value); + return self->/valuesetcomposeincludes/[valueSetComposeIncludeId].get(); + } + + isolated resource function delete valuesetcomposeincludes/[int valueSetComposeIncludeId]() returns ValueSetComposeInclude|persist:Error { + ValueSetComposeInclude result = check self->/valuesetcomposeincludes/[valueSetComposeIncludeId].get(); + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(VALUE_SET_COMPOSE_INCLUDE); + } + _ = check sqlClient.runDeleteQuery(valueSetComposeIncludeId); + return result; + } + + isolated resource function get valuesetcomposeincludevaluesets(ValueSetComposeIncludeValueSetTargetType targetType = <>, sql:ParameterizedQuery whereClause = ``, sql:ParameterizedQuery orderByClause = ``, sql:ParameterizedQuery limitClause = ``, sql:ParameterizedQuery groupByClause = ``) returns stream = @java:Method { + 'class: "io.ballerina.stdlib.persist.sql.datastore.PostgreSQLProcessor", + name: "query" + } external; + + isolated resource function get valuesetcomposeincludevaluesets/[int valueSetComposeIncludeValueSetId](ValueSetComposeIncludeValueSetTargetType targetType = <>) returns targetType|persist:Error = @java:Method { + 'class: "io.ballerina.stdlib.persist.sql.datastore.PostgreSQLProcessor", + name: "queryOne" + } external; + + isolated resource function post valuesetcomposeincludevaluesets(ValueSetComposeIncludeValueSetInsert[] data) returns int[]|persist:Error { + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(VALUE_SET_COMPOSE_INCLUDE_VALUE_SET); + } + sql:ExecutionResult[] result = check sqlClient.runBatchInsertQuery(data); + return from sql:ExecutionResult inserted in result + where inserted.lastInsertId != () + select inserted.lastInsertId; + } + + isolated resource function put valuesetcomposeincludevaluesets/[int valueSetComposeIncludeValueSetId](ValueSetComposeIncludeValueSetUpdate value) returns ValueSetComposeIncludeValueSet|persist:Error { + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(VALUE_SET_COMPOSE_INCLUDE_VALUE_SET); + } + _ = check sqlClient.runUpdateQuery(valueSetComposeIncludeValueSetId, value); + return self->/valuesetcomposeincludevaluesets/[valueSetComposeIncludeValueSetId].get(); + } + + isolated resource function delete valuesetcomposeincludevaluesets/[int valueSetComposeIncludeValueSetId]() returns ValueSetComposeIncludeValueSet|persist:Error { + ValueSetComposeIncludeValueSet result = check self->/valuesetcomposeincludevaluesets/[valueSetComposeIncludeValueSetId].get(); + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(VALUE_SET_COMPOSE_INCLUDE_VALUE_SET); + } + _ = check sqlClient.runDeleteQuery(valueSetComposeIncludeValueSetId); + return result; + } + + isolated resource function get valuesetcomposeincludeconcepts(ValueSetComposeIncludeConceptTargetType targetType = <>, sql:ParameterizedQuery whereClause = ``, sql:ParameterizedQuery orderByClause = ``, sql:ParameterizedQuery limitClause = ``, sql:ParameterizedQuery groupByClause = ``) returns stream = @java:Method { + 'class: "io.ballerina.stdlib.persist.sql.datastore.PostgreSQLProcessor", + name: "query" + } external; + + isolated resource function get valuesetcomposeincludeconcepts/[int valueSetComposeIncludeConceptId](ValueSetComposeIncludeConceptTargetType targetType = <>) returns targetType|persist:Error = @java:Method { + 'class: "io.ballerina.stdlib.persist.sql.datastore.PostgreSQLProcessor", + name: "queryOne" + } external; + + isolated resource function post valuesetcomposeincludeconcepts(ValueSetComposeIncludeConceptInsert[] data) returns int[]|persist:Error { + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(VALUE_SET_COMPOSE_INCLUDE_CONCEPT); + } + sql:ExecutionResult[] result = check sqlClient.runBatchInsertQuery(data); + return from sql:ExecutionResult inserted in result + where inserted.lastInsertId != () + select inserted.lastInsertId; + } + + isolated resource function put valuesetcomposeincludeconcepts/[int valueSetComposeIncludeConceptId](ValueSetComposeIncludeConceptUpdate value) returns ValueSetComposeIncludeConcept|persist:Error { + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(VALUE_SET_COMPOSE_INCLUDE_CONCEPT); + } + _ = check sqlClient.runUpdateQuery(valueSetComposeIncludeConceptId, value); + return self->/valuesetcomposeincludeconcepts/[valueSetComposeIncludeConceptId].get(); + } + + isolated resource function delete valuesetcomposeincludeconcepts/[int valueSetComposeIncludeConceptId]() returns ValueSetComposeIncludeConcept|persist:Error { + ValueSetComposeIncludeConcept result = check self->/valuesetcomposeincludeconcepts/[valueSetComposeIncludeConceptId].get(); + psql:SQLClient sqlClient; + lock { + sqlClient = self.persistClients.get(VALUE_SET_COMPOSE_INCLUDE_CONCEPT); + } + _ = check sqlClient.runDeleteQuery(valueSetComposeIncludeConceptId); + return result; + } + + remote isolated function queryNativeSQL(sql:ParameterizedQuery sqlQuery, typedesc rowType = <>) returns stream = @java:Method { + 'class: "io.ballerina.stdlib.persist.sql.datastore.PostgreSQLProcessor" + } external; + + remote isolated function executeNativeSQL(sql:ParameterizedQuery sqlQuery) returns psql:ExecutionResult|persist:Error = @java:Method { + 'class: "io.ballerina.stdlib.persist.sql.datastore.PostgreSQLProcessor" + } external; + + public isolated function close() returns persist:Error? { + error? result = self.dbClient.close(); + if result is error { + return error(result.message()); + } + return result; + } +} + diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_114/modules/postgresql_entities/persist_db_config.bal b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_114/modules/postgresql_entities/persist_db_config.bal new file mode 100644 index 000000000..f1fccabc1 --- /dev/null +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_114/modules/postgresql_entities/persist_db_config.bal @@ -0,0 +1,15 @@ +// AUTO-GENERATED FILE. DO NOT MODIFY. + +// This file is an auto-generated file by Ballerina persistence layer. +// It should not be modified by hand. + +import ballerinax/postgresql; + +configurable int port = ?; +configurable string host = ?; +configurable string user = ?; +configurable string database = ?; +configurable string password = ?; +configurable postgresql:Options & readonly connectionOptions = {}; +configurable string? defaultSchema = (); + diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_114/modules/postgresql_entities/persist_types.bal b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_114/modules/postgresql_entities/persist_types.bal new file mode 100644 index 000000000..3a8fc2797 --- /dev/null +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_114/modules/postgresql_entities/persist_types.bal @@ -0,0 +1,265 @@ +// AUTO-GENERATED FILE. DO NOT MODIFY. + +// This file is an auto-generated file by Ballerina persistence layer for model. +// It should not be modified by hand. + +public type CodeSystem record {| + readonly int codeSystemId; + string id; + string url; + string 'version; + string name; + string title; + string status; + string date; + string publisher; + byte[] codeSystem; + +|}; + +public type CodeSystemOptionalized record {| + int codeSystemId?; + string id?; + string url?; + string 'version?; + string name?; + string title?; + string status?; + string date?; + string publisher?; + byte[] codeSystem?; +|}; + +public type CodeSystemWithRelations record {| + *CodeSystemOptionalized; + ConceptOptionalized[] concepts?; +|}; + +public type CodeSystemTargetType typedesc; + +public type CodeSystemInsert record {| + string id; + string url; + string 'version; + string name; + string title; + string status; + string date; + string publisher; + byte[] codeSystem; +|}; + +public type CodeSystemUpdate record {| + string id?; + string url?; + string 'version?; + string name?; + string title?; + string status?; + string date?; + string publisher?; + byte[] codeSystem?; +|}; + +public type Concept record {| + readonly int conceptId; + string code; + byte[] concept; + int? parentConceptId; + int codesystemCodeSystemId; + +|}; + +public type ConceptOptionalized record {| + int conceptId?; + string code?; + byte[] concept?; + int? parentConceptId?; + int codesystemCodeSystemId?; +|}; + +public type ConceptWithRelations record {| + *ConceptOptionalized; + CodeSystemOptionalized codeSystem?; + ValueSetComposeIncludeConceptOptionalized[] valuesetcomposeincludeconcept?; +|}; + +public type ConceptTargetType typedesc; + +public type ConceptInsert record {| + string code; + byte[] concept; + int? parentConceptId; + int codesystemCodeSystemId; +|}; + +public type ConceptUpdate record {| + string code?; + byte[] concept?; + int? parentConceptId?; + int codesystemCodeSystemId?; +|}; + +public type ValueSet record {| + readonly int valueSetId; + string id; + string url; + string 'version; + string name; + string title; + string status; + string date; + string publisher; + byte[] valueSet; + +|}; + +public type ValueSetOptionalized record {| + int valueSetId?; + string id?; + string url?; + string 'version?; + string name?; + string title?; + string status?; + string date?; + string publisher?; + byte[] valueSet?; +|}; + +public type ValueSetWithRelations record {| + *ValueSetOptionalized; + ValueSetComposeIncludeOptionalized[] composes?; + ValueSetComposeIncludeValueSetOptionalized[] conceptsInValueSetConcepts?; +|}; + +public type ValueSetTargetType typedesc; + +public type ValueSetInsert record {| + string id; + string url; + string 'version; + string name; + string title; + string status; + string date; + string publisher; + byte[] valueSet; +|}; + +public type ValueSetUpdate record {| + string id?; + string url?; + string 'version?; + string name?; + string title?; + string status?; + string date?; + string publisher?; + byte[] valueSet?; +|}; + +public type ValueSetComposeInclude record {| + readonly int valueSetComposeIncludeId; + boolean systemFlag; + boolean valueSetFlag; + boolean conceptFlag; + int valuesetValueSetId; + + int? codeSystemId; +|}; + +public type ValueSetComposeIncludeOptionalized record {| + int valueSetComposeIncludeId?; + boolean systemFlag?; + boolean valueSetFlag?; + boolean conceptFlag?; + int valuesetValueSetId?; + int? codeSystemId?; +|}; + +public type ValueSetComposeIncludeWithRelations record {| + *ValueSetComposeIncludeOptionalized; + ValueSetOptionalized valueSet?; + ValueSetComposeIncludeValueSetOptionalized[] valuesetcomposeincludevalueset?; + ValueSetComposeIncludeConceptOptionalized[] valuesetcomposeincludeconcept?; +|}; + +public type ValueSetComposeIncludeTargetType typedesc; + +public type ValueSetComposeIncludeInsert record {| + boolean systemFlag; + boolean valueSetFlag; + boolean conceptFlag; + int valuesetValueSetId; + int? codeSystemId; +|}; + +public type ValueSetComposeIncludeUpdate record {| + boolean systemFlag?; + boolean valueSetFlag?; + boolean conceptFlag?; + int valuesetValueSetId?; + int? codeSystemId?; +|}; + +public type ValueSetComposeIncludeValueSet record {| + readonly int valueSetComposeIncludeValueSetId; + int valuesetcomposeValueSetComposeIncludeId; + int valuesetValueSetId; +|}; + +public type ValueSetComposeIncludeValueSetOptionalized record {| + int valueSetComposeIncludeValueSetId?; + int valuesetcomposeValueSetComposeIncludeId?; + int valuesetValueSetId?; +|}; + +public type ValueSetComposeIncludeValueSetWithRelations record {| + *ValueSetComposeIncludeValueSetOptionalized; + ValueSetComposeIncludeOptionalized valuesetCompose?; + ValueSetOptionalized valueset?; +|}; + +public type ValueSetComposeIncludeValueSetTargetType typedesc; + +public type ValueSetComposeIncludeValueSetInsert record {| + int valuesetcomposeValueSetComposeIncludeId; + int valuesetValueSetId; +|}; + +public type ValueSetComposeIncludeValueSetUpdate record {| + int valuesetcomposeValueSetComposeIncludeId?; + int valuesetValueSetId?; +|}; + +public type ValueSetComposeIncludeConcept record {| + readonly int valueSetComposeIncludeConceptId; + int valuesetcomposeValueSetComposeIncludeId; + int conceptConceptId; +|}; + +public type ValueSetComposeIncludeConceptOptionalized record {| + int valueSetComposeIncludeConceptId?; + int valuesetcomposeValueSetComposeIncludeId?; + int conceptConceptId?; +|}; + +public type ValueSetComposeIncludeConceptWithRelations record {| + *ValueSetComposeIncludeConceptOptionalized; + ValueSetComposeIncludeOptionalized valuesetCompose?; + ConceptOptionalized concept?; +|}; + +public type ValueSetComposeIncludeConceptTargetType typedesc; + +public type ValueSetComposeIncludeConceptInsert record {| + int valuesetcomposeValueSetComposeIncludeId; + int conceptConceptId; +|}; + +public type ValueSetComposeIncludeConceptUpdate record {| + int valuesetcomposeValueSetComposeIncludeId?; + int conceptConceptId?; +|}; + diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_114/modules/postgresql_entities/script.sql b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_114/modules/postgresql_entities/script.sql new file mode 100644 index 000000000..d9dbef119 --- /dev/null +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_114/modules/postgresql_entities/script.sql @@ -0,0 +1,80 @@ +-- AUTO-GENERATED FILE. + +-- This file is an auto-generated file by Ballerina persistence layer for model. +-- Please verify the generated scripts and execute them against the target DB server. + +DROP TABLE IF EXISTS "valueset_compose_include_concepts"; +DROP TABLE IF EXISTS "valueset_compose_include_value_sets"; +DROP TABLE IF EXISTS "concepts"; +DROP TABLE IF EXISTS "valueset_compose_includes"; +DROP TABLE IF EXISTS "codesystems"; +DROP TABLE IF EXISTS "valuesets"; + +CREATE TABLE "valuesets" ( + "valueSetId" SERIAL, + "id" VARCHAR(191) NOT NULL, + "url" VARCHAR(191) NOT NULL, + "version" VARCHAR(191) NOT NULL, + "name" VARCHAR(191) NOT NULL, + "title" VARCHAR(191) NOT NULL, + "status" VARCHAR(191) NOT NULL, + "date" VARCHAR(191) NOT NULL, + "publisher" VARCHAR(191) NOT NULL, + "valueSet" BYTEA NOT NULL, + PRIMARY KEY("valueSetId") +); + +CREATE TABLE "codesystems" ( + "codeSystemId" SERIAL, + "id" VARCHAR(191) NOT NULL, + "url" VARCHAR(191) NOT NULL, + "version" VARCHAR(191) NOT NULL, + "name" VARCHAR(191) NOT NULL, + "title" VARCHAR(191) NOT NULL, + "status" VARCHAR(191) NOT NULL, + "date" VARCHAR(191) NOT NULL, + "publisher" VARCHAR(191) NOT NULL, + "codeSystem" BYTEA NOT NULL, + PRIMARY KEY("codeSystemId") +); + +CREATE TABLE "valueset_compose_includes" ( + "valueSetComposeIncludeId" SERIAL, + "systemFlag" BOOLEAN NOT NULL, + "valueSetFlag" BOOLEAN NOT NULL, + "conceptFlag" BOOLEAN NOT NULL, + "codeSystemId" INT, + "valuesetValueSetId" INT NOT NULL, + FOREIGN KEY("valuesetValueSetId") REFERENCES "valuesets"("valueSetId"), + PRIMARY KEY("valueSetComposeIncludeId") +); + +CREATE TABLE "concepts" ( + "conceptId" SERIAL, + "code" VARCHAR(191) NOT NULL, + "concept" BYTEA NOT NULL, + "parentConceptId" INT, + "codesystemCodeSystemId" INT NOT NULL, + FOREIGN KEY("codesystemCodeSystemId") REFERENCES "codesystems"("codeSystemId"), + PRIMARY KEY("conceptId") +); + +CREATE TABLE "valueset_compose_include_value_sets" ( + "valueSetComposeIncludeValueSetId" SERIAL, + "valuesetcomposeValueSetComposeIncludeId" INT NOT NULL, + FOREIGN KEY("valuesetcomposeValueSetComposeIncludeId") REFERENCES "valueset_compose_includes"("valueSetComposeIncludeId"), + "valuesetValueSetId" INT NOT NULL, + FOREIGN KEY("valuesetValueSetId") REFERENCES "valuesets"("valueSetId"), + PRIMARY KEY("valueSetComposeIncludeValueSetId") +); + +CREATE TABLE "valueset_compose_include_concepts" ( + "valueSetComposeIncludeConceptId" SERIAL, + "valuesetcomposeValueSetComposeIncludeId" INT NOT NULL, + FOREIGN KEY("valuesetcomposeValueSetComposeIncludeId") REFERENCES "valueset_compose_includes"("valueSetComposeIncludeId"), + "conceptConceptId" INT NOT NULL, + FOREIGN KEY("conceptConceptId") REFERENCES "concepts"("conceptId"), + PRIMARY KEY("valueSetComposeIncludeConceptId") +); + + diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_114/persist/model.bal b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_114/persist/model.bal new file mode 100644 index 000000000..0da58c08b --- /dev/null +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_114/persist/model.bal @@ -0,0 +1,91 @@ +// Copyright (c) 2025 WSO2 LLC. (http://www.wso2.org). +// +// WSO2 LLC. licenses this file to you under the Apache License, +// Version 2.0 (the "License"); you may not use this file except +// in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +import ballerina/persist as _; +import ballerinax/persist.sql; + +@sql:Name {value: "codesystems"} +public type CodeSystem record {| + @sql:Generated + readonly int codeSystemId; + string id; + string url; + string version; + string name; + string title; + string status; + string date; + string publisher; + byte[] codeSystem; + Concept[] concepts; +|}; + +@sql:Name {value: "concepts"} +public type Concept record {| + @sql:Generated + readonly int conceptId; + string code; + byte[] concept; + int? parentConceptId; + CodeSystem codeSystem; + ValueSetComposeIncludeConcept[] valuesetcomposeincludeconcept; +|}; + +@sql:Name {value: "valuesets"} +public type ValueSet record {| + @sql:Generated + readonly int valueSetId; + string id; + string url; + string version; + string name; + string title; + string status; + string date; + string publisher; + byte[] valueSet; + ValueSetComposeInclude[] composes; + ValueSetComposeIncludeValueSet[] conceptsInValueSetConcepts; +|}; + +@sql:Name {value: "valueset_compose_includes"} +public type ValueSetComposeInclude record {| + @sql:Generated + readonly int valueSetComposeIncludeId; + boolean systemFlag; + boolean valueSetFlag; + boolean conceptFlag; + ValueSet valueSet; + ValueSetComposeIncludeValueSet[] valuesetcomposeincludevalueset; + ValueSetComposeIncludeConcept[] valuesetcomposeincludeconcept; + int? codeSystemId; +|}; + +@sql:Name {value: "valueset_compose_include_value_sets"} +public type ValueSetComposeIncludeValueSet record {| + @sql:Generated + readonly int valueSetComposeIncludeValueSetId; + ValueSetComposeInclude valuesetCompose; + ValueSet valueset; +|}; + +@sql:Name {value: "valueset_compose_include_concepts"} +public type ValueSetComposeIncludeConcept record {| + @sql:Generated + readonly int valueSetComposeIncludeConceptId; + ValueSetComposeInclude valuesetCompose; + Concept concept; +|}; diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_114/target/Persist.toml b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_114/target/Persist.toml new file mode 100644 index 000000000..b6e0bf49b --- /dev/null +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_114/target/Persist.toml @@ -0,0 +1,3 @@ +[[tool.persist]] +options.datastore = "postgresql" +module = "tool_test_generate_114.postgresql_entities" diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_2/modules/entities/script.sql b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_2/modules/entities/script.sql index 0cef9b31d..61c83e0fb 100644 --- a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_2/modules/entities/script.sql +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_2/modules/entities/script.sql @@ -3,16 +3,8 @@ -- This file is an auto-generated file by Ballerina persistence layer for model. -- Please verify the generated scripts and execute them against the target DB server. -DROP TABLE IF EXISTS `MedicalNeed`; DROP TABLE IF EXISTS `MedicalItem`; - -CREATE TABLE `MedicalItem` ( - `itemId` INT NOT NULL, - `name` VARCHAR(191) NOT NULL, - `type` VARCHAR(191) NOT NULL, - `unit` VARCHAR(191) NOT NULL, - PRIMARY KEY(`itemId`) -); +DROP TABLE IF EXISTS `MedicalNeed`; CREATE TABLE `MedicalNeed` ( `needId` INT NOT NULL, @@ -23,3 +15,13 @@ CREATE TABLE `MedicalNeed` ( `quantity` INT NOT NULL, PRIMARY KEY(`needId`) ); + +CREATE TABLE `MedicalItem` ( + `itemId` INT NOT NULL, + `name` VARCHAR(191) NOT NULL, + `type` VARCHAR(191) NOT NULL, + `unit` VARCHAR(191) NOT NULL, + PRIMARY KEY(`itemId`) +); + + diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_35/persist_test_init.bal b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_35/persist_test_init.bal index 2f35bef1c..1f68e8edd 100644 --- a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_35/persist_test_init.bal +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_35/persist_test_init.bal @@ -10,14 +10,8 @@ isolated final H2Client h2Client = check new ("jdbc:h2:./test", "sa", ""); public isolated function setupTestDB() returns persist:Error? { _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Workspace";`); _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Employee";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Building";`); _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Department";`); - _ = check h2Client->executeNativeSQL(` -CREATE TABLE "Department" ( - "deptNo" VARCHAR(191) NOT NULL, - "deptName" VARCHAR(191) NOT NULL, - PRIMARY KEY("deptNo") -);`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Building";`); _ = check h2Client->executeNativeSQL(` CREATE TABLE "Building" ( "buildingCode" VARCHAR(191) NOT NULL, @@ -28,6 +22,12 @@ CREATE TABLE "Building" ( PRIMARY KEY("buildingCode") );`); _ = check h2Client->executeNativeSQL(` +CREATE TABLE "Department" ( + "deptNo" VARCHAR(191) NOT NULL, + "deptName" VARCHAR(191) NOT NULL, + PRIMARY KEY("deptNo") +);`); + _ = check h2Client->executeNativeSQL(` CREATE TABLE "Employee" ( "empNo" VARCHAR(191) NOT NULL, "firstName" VARCHAR(191) NOT NULL, @@ -54,7 +54,7 @@ CREATE TABLE "Workspace" ( public isolated function cleanupTestDB() returns persist:Error? { _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Workspace";`); _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Employee";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Building";`); _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Department";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Building";`); } diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_35/script.sql b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_35/script.sql index e028a582e..e67037585 100644 --- a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_35/script.sql +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_35/script.sql @@ -5,14 +5,8 @@ DROP TABLE IF EXISTS `Workspace`; DROP TABLE IF EXISTS `Employee`; -DROP TABLE IF EXISTS `Building`; DROP TABLE IF EXISTS `Department`; - -CREATE TABLE `Department` ( - `deptNo` VARCHAR(191) NOT NULL, - `deptName` VARCHAR(191) NOT NULL, - PRIMARY KEY(`deptNo`) -); +DROP TABLE IF EXISTS `Building`; CREATE TABLE `Building` ( `buildingCode` VARCHAR(191) NOT NULL, @@ -23,6 +17,12 @@ CREATE TABLE `Building` ( PRIMARY KEY(`buildingCode`) ); +CREATE TABLE `Department` ( + `deptNo` VARCHAR(191) NOT NULL, + `deptName` VARCHAR(191) NOT NULL, + PRIMARY KEY(`deptNo`) +); + CREATE TABLE `Employee` ( `empNo` VARCHAR(191) NOT NULL, `firstName` VARCHAR(191) NOT NULL, @@ -44,3 +44,5 @@ CREATE TABLE `Workspace` ( FOREIGN KEY(`employeeEmpNo`) REFERENCES `Employee`(`empNo`), PRIMARY KEY(`workspaceId`) ); + + diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_36/modules/rainier/persist_test_init.bal b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_36/modules/rainier/persist_test_init.bal index ca6c6cc73..896d7728f 100644 --- a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_36/modules/rainier/persist_test_init.bal +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_36/modules/rainier/persist_test_init.bal @@ -10,23 +10,9 @@ isolated final H2Client h2Client = check new ("jdbc:h2:./test", "sa", ""); public isolated function setupTestDB() returns persist:Error? { _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Employee";`); _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Workspace";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Building";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Department";`); _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "OrderItem";`); - _ = check h2Client->executeNativeSQL(` -CREATE TABLE "OrderItem" ( - "orderId" VARCHAR(191) NOT NULL, - "itemId" VARCHAR(191) NOT NULL, - "quantity" INT NOT NULL, - "notes" VARCHAR(191) NOT NULL, - PRIMARY KEY("orderId","itemId") -);`); - _ = check h2Client->executeNativeSQL(` -CREATE TABLE "Department" ( - "deptNo" VARCHAR(191) NOT NULL, - "deptName" VARCHAR(191) NOT NULL, - PRIMARY KEY("deptNo") -);`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Department";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Building";`); _ = check h2Client->executeNativeSQL(` CREATE TABLE "Building" ( "buildingCode" VARCHAR(191) NOT NULL, @@ -38,6 +24,20 @@ CREATE TABLE "Building" ( PRIMARY KEY("buildingCode") );`); _ = check h2Client->executeNativeSQL(` +CREATE TABLE "Department" ( + "deptNo" VARCHAR(191) NOT NULL, + "deptName" VARCHAR(191) NOT NULL, + PRIMARY KEY("deptNo") +);`); + _ = check h2Client->executeNativeSQL(` +CREATE TABLE "OrderItem" ( + "orderId" VARCHAR(191) NOT NULL, + "itemId" VARCHAR(191) NOT NULL, + "quantity" INT NOT NULL, + "notes" VARCHAR(191) NOT NULL, + PRIMARY KEY("orderId","itemId") +);`); + _ = check h2Client->executeNativeSQL(` CREATE TABLE "Workspace" ( "workspaceId" VARCHAR(191) NOT NULL, "workspaceType" VARCHAR(191) NOT NULL, @@ -64,8 +64,8 @@ CREATE TABLE "Employee" ( public isolated function cleanupTestDB() returns persist:Error? { _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Employee";`); _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Workspace";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Building";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Department";`); _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "OrderItem";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Department";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Building";`); } diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_36/modules/rainier/script.sql b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_36/modules/rainier/script.sql index bf3a5bebf..19b36a544 100644 --- a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_36/modules/rainier/script.sql +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_36/modules/rainier/script.sql @@ -5,23 +5,9 @@ DROP TABLE IF EXISTS `Employee`; DROP TABLE IF EXISTS `Workspace`; -DROP TABLE IF EXISTS `Building`; -DROP TABLE IF EXISTS `Department`; DROP TABLE IF EXISTS `OrderItem`; - -CREATE TABLE `OrderItem` ( - `orderId` VARCHAR(191) NOT NULL, - `itemId` VARCHAR(191) NOT NULL, - `quantity` INT NOT NULL, - `notes` VARCHAR(191) NOT NULL, - PRIMARY KEY(`orderId`,`itemId`) -); - -CREATE TABLE `Department` ( - `deptNo` VARCHAR(191) NOT NULL, - `deptName` VARCHAR(191) NOT NULL, - PRIMARY KEY(`deptNo`) -); +DROP TABLE IF EXISTS `Department`; +DROP TABLE IF EXISTS `Building`; CREATE TABLE `Building` ( `buildingCode` VARCHAR(191) NOT NULL, @@ -33,6 +19,20 @@ CREATE TABLE `Building` ( PRIMARY KEY(`buildingCode`) ); +CREATE TABLE `Department` ( + `deptNo` VARCHAR(191) NOT NULL, + `deptName` VARCHAR(191) NOT NULL, + PRIMARY KEY(`deptNo`) +); + +CREATE TABLE `OrderItem` ( + `orderId` VARCHAR(191) NOT NULL, + `itemId` VARCHAR(191) NOT NULL, + `quantity` INT NOT NULL, + `notes` VARCHAR(191) NOT NULL, + PRIMARY KEY(`orderId`,`itemId`) +); + CREATE TABLE `Workspace` ( `workspaceId` VARCHAR(191) NOT NULL, `workspaceType` VARCHAR(191) NOT NULL, @@ -54,3 +54,5 @@ CREATE TABLE `Employee` ( FOREIGN KEY(`workspaceWorkspaceId`) REFERENCES `Workspace`(`workspaceId`), PRIMARY KEY(`empNo`) ); + + diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_37/modules/entities/persist_test_init.bal b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_37/modules/entities/persist_test_init.bal index d2abf2261..a4e726240 100644 --- a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_37/modules/entities/persist_test_init.bal +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_37/modules/entities/persist_test_init.bal @@ -9,11 +9,17 @@ isolated final H2Client h2Client = check new ("jdbc:h2:./test", "sa", ""); public isolated function setupTestDB() returns persist:Error? { _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Profile";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "User";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Dept";`); _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Customer";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "MultipleAssociations";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Dept";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "User";`); _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Student";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "MultipleAssociations";`); + _ = check h2Client->executeNativeSQL(` +CREATE TABLE "MultipleAssociations" ( + "id" INT NOT NULL, + "name" VARCHAR(191) NOT NULL, + PRIMARY KEY("id") +);`); _ = check h2Client->executeNativeSQL(` CREATE TABLE "Student" ( "id" INT NOT NULL, @@ -24,16 +30,9 @@ CREATE TABLE "Student" ( PRIMARY KEY("id","firstName") );`); _ = check h2Client->executeNativeSQL(` -CREATE TABLE "MultipleAssociations" ( - "id" INT NOT NULL, - "name" VARCHAR(191) NOT NULL, - PRIMARY KEY("id") -);`); - _ = check h2Client->executeNativeSQL(` -CREATE TABLE "Customer" ( +CREATE TABLE "User" ( "id" INT NOT NULL, "name" VARCHAR(191) NOT NULL, - "age" INT NOT NULL, "multipleassociationsId" INT UNIQUE NOT NULL, FOREIGN KEY("multipleassociationsId") REFERENCES "MultipleAssociations"("id"), PRIMARY KEY("id") @@ -47,9 +46,10 @@ CREATE TABLE "Dept" ( PRIMARY KEY("id") );`); _ = check h2Client->executeNativeSQL(` -CREATE TABLE "User" ( +CREATE TABLE "Customer" ( "id" INT NOT NULL, "name" VARCHAR(191) NOT NULL, + "age" INT NOT NULL, "multipleassociationsId" INT UNIQUE NOT NULL, FOREIGN KEY("multipleassociationsId") REFERENCES "MultipleAssociations"("id"), PRIMARY KEY("id") @@ -70,10 +70,10 @@ CREATE TABLE "Profile" ( public isolated function cleanupTestDB() returns persist:Error? { _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Profile";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "User";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Dept";`); _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Customer";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "MultipleAssociations";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Dept";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "User";`); _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Student";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "MultipleAssociations";`); } diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_37/modules/entities/script.sql b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_37/modules/entities/script.sql index e0f3520fa..981cbaa40 100644 --- a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_37/modules/entities/script.sql +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_37/modules/entities/script.sql @@ -4,11 +4,17 @@ -- Please verify the generated scripts and execute them against the target DB server. DROP TABLE IF EXISTS `Profile`; -DROP TABLE IF EXISTS `User`; -DROP TABLE IF EXISTS `Dept`; DROP TABLE IF EXISTS `Customer`; -DROP TABLE IF EXISTS `MultipleAssociations`; +DROP TABLE IF EXISTS `Dept`; +DROP TABLE IF EXISTS `User`; DROP TABLE IF EXISTS `Student`; +DROP TABLE IF EXISTS `MultipleAssociations`; + +CREATE TABLE `MultipleAssociations` ( + `id` INT NOT NULL, + `name` VARCHAR(191) NOT NULL, + PRIMARY KEY(`id`) +); CREATE TABLE `Student` ( `id` INT NOT NULL, @@ -19,16 +25,9 @@ CREATE TABLE `Student` ( PRIMARY KEY(`id`,`firstName`) ); -CREATE TABLE `MultipleAssociations` ( - `id` INT NOT NULL, - `name` VARCHAR(191) NOT NULL, - PRIMARY KEY(`id`) -); - -CREATE TABLE `Customer` ( +CREATE TABLE `User` ( `id` INT NOT NULL, `name` VARCHAR(191) NOT NULL, - `age` INT NOT NULL, `multipleassociationsId` INT UNIQUE NOT NULL, FOREIGN KEY(`multipleassociationsId`) REFERENCES `MultipleAssociations`(`id`), PRIMARY KEY(`id`) @@ -42,9 +41,10 @@ CREATE TABLE `Dept` ( PRIMARY KEY(`id`) ); -CREATE TABLE `User` ( +CREATE TABLE `Customer` ( `id` INT NOT NULL, `name` VARCHAR(191) NOT NULL, + `age` INT NOT NULL, `multipleassociationsId` INT UNIQUE NOT NULL, FOREIGN KEY(`multipleassociationsId`) REFERENCES `MultipleAssociations`(`id`), PRIMARY KEY(`id`) @@ -61,3 +61,5 @@ CREATE TABLE `Profile` ( FOREIGN KEY(`ownerId`) REFERENCES `User`(`id`), PRIMARY KEY(`id`) ); + + diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_41/modules/entities/script.sql b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_41/modules/entities/script.sql index 2f747cc7b..02321fc3d 100644 --- a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_41/modules/entities/script.sql +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_41/modules/entities/script.sql @@ -5,16 +5,17 @@ DROP TABLE IF EXISTS `Workspace`; DROP TABLE IF EXISTS `Employee`; -DROP TABLE IF EXISTS `Building`; -DROP TABLE IF EXISTS `Department`; DROP TABLE IF EXISTS `OrderItem`; +DROP TABLE IF EXISTS `Department`; +DROP TABLE IF EXISTS `Building`; -CREATE TABLE `OrderItem` ( - `orderId` VARCHAR(191) NOT NULL, - `itemId` VARCHAR(191) NOT NULL, - `quantity` INT NOT NULL, - `notes` VARCHAR(191) NOT NULL, - PRIMARY KEY(`orderId`,`itemId`) +CREATE TABLE `Building` ( + `buildingCode` VARCHAR(191) NOT NULL, + `city` VARCHAR(191) NOT NULL, + `state` VARCHAR(191) NOT NULL, + `country` VARCHAR(191) NOT NULL, + `postalCode` VARCHAR(191) NOT NULL, + PRIMARY KEY(`buildingCode`) ); CREATE TABLE `Department` ( @@ -23,13 +24,12 @@ CREATE TABLE `Department` ( PRIMARY KEY(`deptNo`) ); -CREATE TABLE `Building` ( - `buildingCode` VARCHAR(191) NOT NULL, - `city` VARCHAR(191) NOT NULL, - `state` VARCHAR(191) NOT NULL, - `country` VARCHAR(191) NOT NULL, - `postalCode` VARCHAR(191) NOT NULL, - PRIMARY KEY(`buildingCode`) +CREATE TABLE `OrderItem` ( + `orderId` VARCHAR(191) NOT NULL, + `itemId` VARCHAR(191) NOT NULL, + `quantity` INT NOT NULL, + `notes` VARCHAR(191) NOT NULL, + PRIMARY KEY(`orderId`,`itemId`) ); CREATE TABLE `Employee` ( @@ -57,3 +57,5 @@ CREATE TABLE `Workspace` ( FOREIGN KEY(`employeeEmpNo`) REFERENCES `Employee`(`empNo`), PRIMARY KEY(`workspaceId`) ); + + diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_46/modules/entities/script.sql b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_46/modules/entities/script.sql index ff69c208f..674bd55b1 100644 --- a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_46/modules/entities/script.sql +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_46/modules/entities/script.sql @@ -3,8 +3,8 @@ -- This file is an auto-generated file by Ballerina persistence layer for model. -- Please verify the generated scripts and execute them against the target DB server. -DROP TABLE IF EXISTS `Post`; DROP TABLE IF EXISTS `Follower`; +DROP TABLE IF EXISTS `Post`; DROP TABLE IF EXISTS `User`; CREATE TABLE `User` ( @@ -14,16 +14,6 @@ CREATE TABLE `User` ( PRIMARY KEY(`id`) ); -CREATE TABLE `Follower` ( - `id` INT NOT NULL, - `created_date` DATETIME NOT NULL, - `leaderId` INT NOT NULL, - FOREIGN KEY(`leaderId`) REFERENCES `User`(`id`), - `followerId` INT NOT NULL, - FOREIGN KEY(`followerId`) REFERENCES `User`(`id`), - PRIMARY KEY(`id`) -); - CREATE TABLE `Post` ( `id` INT NOT NULL, `description` VARCHAR(191) NOT NULL, @@ -34,3 +24,15 @@ CREATE TABLE `Post` ( FOREIGN KEY(`userId`) REFERENCES `User`(`id`), PRIMARY KEY(`id`) ); + +CREATE TABLE `Follower` ( + `id` INT NOT NULL, + `created_date` DATETIME NOT NULL, + `leaderId` INT NOT NULL, + FOREIGN KEY(`leaderId`) REFERENCES `User`(`id`), + `followerId` INT NOT NULL, + FOREIGN KEY(`followerId`) REFERENCES `User`(`id`), + PRIMARY KEY(`id`) +); + + diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_5/modules/entities/persist_test_init.bal b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_5/modules/entities/persist_test_init.bal index 875bde3cb..ccb27a076 100644 --- a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_5/modules/entities/persist_test_init.bal +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_5/modules/entities/persist_test_init.bal @@ -8,16 +8,8 @@ import ballerina/persist; isolated final H2Client h2Client = check new ("jdbc:h2:./test", "sa", ""); public isolated function setupTestDB() returns persist:Error? { - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "MedicalNeed";`); _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "MedicalItem";`); - _ = check h2Client->executeNativeSQL(` -CREATE TABLE "MedicalItem" ( - "itemId" INT NOT NULL, - "name" VARCHAR(191) NOT NULL, - "type" VARCHAR(191) NOT NULL, - "unit" INT NOT NULL, - PRIMARY KEY("itemId") -);`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "MedicalNeed";`); _ = check h2Client->executeNativeSQL(` CREATE TABLE "MedicalNeed" ( "needId" INT NOT NULL, @@ -28,11 +20,19 @@ CREATE TABLE "MedicalNeed" ( "urgency" VARCHAR(191) NOT NULL, "quantity" VARCHAR(191) NOT NULL, PRIMARY KEY("needId") +);`); + _ = check h2Client->executeNativeSQL(` +CREATE TABLE "MedicalItem" ( + "itemId" INT NOT NULL, + "name" VARCHAR(191) NOT NULL, + "type" VARCHAR(191) NOT NULL, + "unit" INT NOT NULL, + PRIMARY KEY("itemId") );`); } public isolated function cleanupTestDB() returns persist:Error? { - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "MedicalNeed";`); _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "MedicalItem";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "MedicalNeed";`); } diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_5/modules/entities/script.sql b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_5/modules/entities/script.sql index 9c5d0ce81..51126d003 100644 --- a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_5/modules/entities/script.sql +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_5/modules/entities/script.sql @@ -3,16 +3,8 @@ -- This file is an auto-generated file by Ballerina persistence layer for model. -- Please verify the generated scripts and execute them against the target DB server. -DROP TABLE IF EXISTS `MedicalNeed`; DROP TABLE IF EXISTS `MedicalItem`; - -CREATE TABLE `MedicalItem` ( - `itemId` INT NOT NULL, - `name` VARCHAR(191) NOT NULL, - `type` VARCHAR(191) NOT NULL, - `unit` INT NOT NULL, - PRIMARY KEY(`itemId`) -); +DROP TABLE IF EXISTS `MedicalNeed`; CREATE TABLE `MedicalNeed` ( `needId` INT NOT NULL, @@ -25,4 +17,12 @@ CREATE TABLE `MedicalNeed` ( PRIMARY KEY(`needId`) ); +CREATE TABLE `MedicalItem` ( + `itemId` INT NOT NULL, + `name` VARCHAR(191) NOT NULL, + `type` VARCHAR(191) NOT NULL, + `unit` INT NOT NULL, + PRIMARY KEY(`itemId`) +); + diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_50/script.sql b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_50/script.sql index b6995a349..ee27cb55c 100644 --- a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_50/script.sql +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_50/script.sql @@ -5,14 +5,8 @@ DROP TABLE IF EXISTS `Workspace`; DROP TABLE IF EXISTS `Employee`; -DROP TABLE IF EXISTS `Building`; DROP TABLE IF EXISTS `Department`; - -CREATE TABLE `Department` ( - `deptNo` VARCHAR(191) NOT NULL, - `deptName` VARCHAR(191) NOT NULL, - PRIMARY KEY(`deptNo`) -); +DROP TABLE IF EXISTS `Building`; CREATE TABLE `Building` ( `buildingCode` VARCHAR(191) NOT NULL, @@ -23,6 +17,12 @@ CREATE TABLE `Building` ( PRIMARY KEY(`buildingCode`) ); +CREATE TABLE `Department` ( + `deptNo` VARCHAR(191) NOT NULL, + `deptName` VARCHAR(191) NOT NULL, + PRIMARY KEY(`deptNo`) +); + CREATE TABLE `Employee` ( `empNo` VARCHAR(191) NOT NULL, `firstName` VARCHAR(191) NOT NULL, @@ -42,3 +42,5 @@ CREATE TABLE `Workspace` ( FOREIGN KEY(`employeeEmpNo`) REFERENCES `Employee`(`empNo`), PRIMARY KEY(`workspaceId`) ); + + diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_51/script.sql b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_51/script.sql index 51e11faa5..3e84f5c35 100644 --- a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_51/script.sql +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_51/script.sql @@ -5,14 +5,8 @@ DROP TABLE IF EXISTS `Workspace`; DROP TABLE IF EXISTS `Employee`; -DROP TABLE IF EXISTS `Building`; DROP TABLE IF EXISTS `Department`; - -CREATE TABLE `Department` ( - `deptNo` VARCHAR(191) NOT NULL, - `deptName` VARCHAR(191) NOT NULL, - PRIMARY KEY(`deptNo`) -); +DROP TABLE IF EXISTS `Building`; CREATE TABLE `Building` ( `buildingCode` VARCHAR(191) NOT NULL, @@ -23,6 +17,12 @@ CREATE TABLE `Building` ( PRIMARY KEY(`buildingCode`) ); +CREATE TABLE `Department` ( + `deptNo` VARCHAR(191) NOT NULL, + `deptName` VARCHAR(191) NOT NULL, + PRIMARY KEY(`deptNo`) +); + CREATE TABLE `Employee` ( `empNo` VARCHAR(191) NOT NULL, `firstName` VARCHAR(191) NOT NULL, diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_58_mssql/modules/entities/persist_test_init.bal b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_58_mssql/modules/entities/persist_test_init.bal index 1f8d55d37..8288e3606 100644 --- a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_58_mssql/modules/entities/persist_test_init.bal +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_58_mssql/modules/entities/persist_test_init.bal @@ -8,69 +8,45 @@ import ballerina/persist; isolated final H2Client h2Client = check new ("jdbc:h2:./test", "sa", ""); public isolated function setupTestDB() returns persist:Error? { - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "CompositeAssociationRecord";`); _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Comment";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Follow";`); _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Employee";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "CompositeAssociationRecord";`); _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Post";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Follow";`); _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Workspace";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Building";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "IntIdRecord";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "User";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "AllTypes";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "DecimalIdRecord";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "StringIdRecord";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "AllTypesIdRecord";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Department";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "BooleanIdRecord";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "OrderItem";`); _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "FloatIdRecord";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "OrderItem";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "BooleanIdRecord";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Department";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "AllTypesIdRecord";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "StringIdRecord";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "DecimalIdRecord";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "AllTypes";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "User";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "IntIdRecord";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Building";`); _ = check h2Client->executeNativeSQL(` -CREATE TABLE "FloatIdRecord" ( - "id" FLOAT NOT NULL, - "randomField" VARCHAR(191) NOT NULL, - PRIMARY KEY("id") -);`); - _ = check h2Client->executeNativeSQL(` -CREATE TABLE "OrderItem" ( - "orderId" VARCHAR(191) NOT NULL, - "itemId" VARCHAR(191) NOT NULL, - "quantity" INT NOT NULL, - "notes" VARCHAR(191) NOT NULL, - PRIMARY KEY("orderId","itemId") -);`); - _ = check h2Client->executeNativeSQL(` -CREATE TABLE "BooleanIdRecord" ( - "id" BOOLEAN NOT NULL, - "randomField" VARCHAR(191) NOT NULL, - PRIMARY KEY("id") -);`); - _ = check h2Client->executeNativeSQL(` -CREATE TABLE "Department" ( - "deptNo" VARCHAR(191) NOT NULL, - "deptName" VARCHAR(191) NOT NULL, - PRIMARY KEY("deptNo") -);`); - _ = check h2Client->executeNativeSQL(` -CREATE TABLE "AllTypesIdRecord" ( - "booleanType" BOOLEAN NOT NULL, - "intType" INT NOT NULL, - "floatType" FLOAT NOT NULL, - "decimalType" DECIMAL(65,30) NOT NULL, - "stringType" VARCHAR(191) NOT NULL, - "randomField" VARCHAR(191) NOT NULL, - PRIMARY KEY("booleanType","intType","floatType","decimalType","stringType") +CREATE TABLE "Building" ( + "buildingCode" VARCHAR(191) NOT NULL, + "city" VARCHAR(191) NOT NULL, + "state" VARCHAR(191) NOT NULL, + "country" VARCHAR(191) NOT NULL, + "postalCode" VARCHAR(191) NOT NULL, + "type" VARCHAR(191) NOT NULL, + PRIMARY KEY("buildingCode") );`); _ = check h2Client->executeNativeSQL(` -CREATE TABLE "StringIdRecord" ( - "id" VARCHAR(191) NOT NULL, +CREATE TABLE "IntIdRecord" ( + "id" INT NOT NULL, "randomField" VARCHAR(191) NOT NULL, PRIMARY KEY("id") );`); _ = check h2Client->executeNativeSQL(` -CREATE TABLE "DecimalIdRecord" ( - "id" DECIMAL(65,30) NOT NULL, - "randomField" VARCHAR(191) NOT NULL, +CREATE TABLE "User" ( + "id" INT NOT NULL, + "name" VARCHAR(191) NOT NULL, + "birthDate" DATE NOT NULL, + "mobileNumber" VARCHAR(191) NOT NULL, PRIMARY KEY("id") );`); _ = check h2Client->executeNativeSQL(` @@ -101,28 +77,52 @@ CREATE TABLE "AllTypes" ( PRIMARY KEY("id") );`); _ = check h2Client->executeNativeSQL(` -CREATE TABLE "User" ( - "id" INT NOT NULL, - "name" VARCHAR(191) NOT NULL, - "birthDate" DATE NOT NULL, - "mobileNumber" VARCHAR(191) NOT NULL, +CREATE TABLE "DecimalIdRecord" ( + "id" DECIMAL(65,30) NOT NULL, + "randomField" VARCHAR(191) NOT NULL, PRIMARY KEY("id") );`); _ = check h2Client->executeNativeSQL(` -CREATE TABLE "IntIdRecord" ( - "id" INT NOT NULL, +CREATE TABLE "StringIdRecord" ( + "id" VARCHAR(191) NOT NULL, "randomField" VARCHAR(191) NOT NULL, PRIMARY KEY("id") );`); _ = check h2Client->executeNativeSQL(` -CREATE TABLE "Building" ( - "buildingCode" VARCHAR(191) NOT NULL, - "city" VARCHAR(191) NOT NULL, - "state" VARCHAR(191) NOT NULL, - "country" VARCHAR(191) NOT NULL, - "postalCode" VARCHAR(191) NOT NULL, - "type" VARCHAR(191) NOT NULL, - PRIMARY KEY("buildingCode") +CREATE TABLE "AllTypesIdRecord" ( + "booleanType" BOOLEAN NOT NULL, + "intType" INT NOT NULL, + "floatType" FLOAT NOT NULL, + "decimalType" DECIMAL(65,30) NOT NULL, + "stringType" VARCHAR(191) NOT NULL, + "randomField" VARCHAR(191) NOT NULL, + PRIMARY KEY("booleanType","intType","floatType","decimalType","stringType") +);`); + _ = check h2Client->executeNativeSQL(` +CREATE TABLE "Department" ( + "deptNo" VARCHAR(191) NOT NULL, + "deptName" VARCHAR(191) NOT NULL, + PRIMARY KEY("deptNo") +);`); + _ = check h2Client->executeNativeSQL(` +CREATE TABLE "BooleanIdRecord" ( + "id" BOOLEAN NOT NULL, + "randomField" VARCHAR(191) NOT NULL, + PRIMARY KEY("id") +);`); + _ = check h2Client->executeNativeSQL(` +CREATE TABLE "OrderItem" ( + "orderId" VARCHAR(191) NOT NULL, + "itemId" VARCHAR(191) NOT NULL, + "quantity" INT NOT NULL, + "notes" VARCHAR(191) NOT NULL, + PRIMARY KEY("orderId","itemId") +);`); + _ = check h2Client->executeNativeSQL(` +CREATE TABLE "FloatIdRecord" ( + "id" FLOAT NOT NULL, + "randomField" VARCHAR(191) NOT NULL, + PRIMARY KEY("id") );`); _ = check h2Client->executeNativeSQL(` CREATE TABLE "Workspace" ( @@ -133,6 +133,16 @@ CREATE TABLE "Workspace" ( PRIMARY KEY("workspaceId") );`); _ = check h2Client->executeNativeSQL(` +CREATE TABLE "Follow" ( + "id" INT NOT NULL, + "timestamp" DATETIME NOT NULL, + "leaderId" INT NOT NULL, + FOREIGN KEY("leaderId") REFERENCES "User"("id"), + "followerId" INT NOT NULL, + FOREIGN KEY("followerId") REFERENCES "User"("id"), + PRIMARY KEY("id") +);`); + _ = check h2Client->executeNativeSQL(` CREATE TABLE "Post" ( "id" INT NOT NULL, "description" VARCHAR(191) NOT NULL, @@ -144,6 +154,19 @@ CREATE TABLE "Post" ( PRIMARY KEY("id") );`); _ = check h2Client->executeNativeSQL(` +CREATE TABLE "CompositeAssociationRecord" ( + "id" VARCHAR(191) NOT NULL, + "randomField" VARCHAR(191) NOT NULL, + "alltypesidrecordBooleanType" BOOLEAN NOT NULL, + "alltypesidrecordIntType" INT NOT NULL, + "alltypesidrecordFloatType" FLOAT NOT NULL, + "alltypesidrecordDecimalType" DECIMAL(65,30) NOT NULL, + "alltypesidrecordStringType" VARCHAR(191) NOT NULL, + UNIQUE ("alltypesidrecordBooleanType", "alltypesidrecordIntType", "alltypesidrecordFloatType", "alltypesidrecordDecimalType", "alltypesidrecordStringType"), + FOREIGN KEY("alltypesidrecordBooleanType", "alltypesidrecordIntType", "alltypesidrecordFloatType", "alltypesidrecordDecimalType", "alltypesidrecordStringType") REFERENCES "AllTypesIdRecord"("booleanType", "intType", "floatType", "decimalType", "stringType"), + PRIMARY KEY("id") +);`); + _ = check h2Client->executeNativeSQL(` CREATE TABLE "Employee" ( "empNo" VARCHAR(191) NOT NULL, "firstName" VARCHAR(191) NOT NULL, @@ -158,16 +181,6 @@ CREATE TABLE "Employee" ( PRIMARY KEY("empNo") );`); _ = check h2Client->executeNativeSQL(` -CREATE TABLE "Follow" ( - "id" INT NOT NULL, - "timestamp" DATETIME NOT NULL, - "leaderId" INT NOT NULL, - FOREIGN KEY("leaderId") REFERENCES "User"("id"), - "followerId" INT NOT NULL, - FOREIGN KEY("followerId") REFERENCES "User"("id"), - PRIMARY KEY("id") -);`); - _ = check h2Client->executeNativeSQL(` CREATE TABLE "Comment" ( "id" INT NOT NULL, "comment" VARCHAR(191) NOT NULL, @@ -177,39 +190,26 @@ CREATE TABLE "Comment" ( "postId" INT NOT NULL, FOREIGN KEY("postId") REFERENCES "Post"("id"), PRIMARY KEY("id") -);`); - _ = check h2Client->executeNativeSQL(` -CREATE TABLE "CompositeAssociationRecord" ( - "id" VARCHAR(191) NOT NULL, - "randomField" VARCHAR(191) NOT NULL, - "alltypesidrecordBooleanType" BOOLEAN NOT NULL, - "alltypesidrecordIntType" INT NOT NULL, - "alltypesidrecordFloatType" FLOAT NOT NULL, - "alltypesidrecordDecimalType" DECIMAL(65,30) NOT NULL, - "alltypesidrecordStringType" VARCHAR(191) NOT NULL, - UNIQUE ("alltypesidrecordBooleanType", "alltypesidrecordIntType", "alltypesidrecordFloatType", "alltypesidrecordDecimalType", "alltypesidrecordStringType"), - FOREIGN KEY("alltypesidrecordBooleanType", "alltypesidrecordIntType", "alltypesidrecordFloatType", "alltypesidrecordDecimalType", "alltypesidrecordStringType") REFERENCES "AllTypesIdRecord"("booleanType", "intType", "floatType", "decimalType", "stringType"), - PRIMARY KEY("id") );`); } public isolated function cleanupTestDB() returns persist:Error? { - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "CompositeAssociationRecord";`); _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Comment";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Follow";`); _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Employee";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "CompositeAssociationRecord";`); _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Post";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Follow";`); _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Workspace";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Building";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "IntIdRecord";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "User";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "AllTypes";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "DecimalIdRecord";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "StringIdRecord";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "AllTypesIdRecord";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Department";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "BooleanIdRecord";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "OrderItem";`); _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "FloatIdRecord";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "OrderItem";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "BooleanIdRecord";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Department";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "AllTypesIdRecord";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "StringIdRecord";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "DecimalIdRecord";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "AllTypes";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "User";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "IntIdRecord";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Building";`); } diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_58_mssql/modules/entities/script.sql b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_58_mssql/modules/entities/script.sql index 1ab1db990..917a0fb86 100644 --- a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_58_mssql/modules/entities/script.sql +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_58_mssql/modules/entities/script.sql @@ -3,69 +3,45 @@ -- This file is an auto-generated file by Ballerina persistence layer for model. -- Please verify the generated scripts and execute them against the target DB server. -DROP TABLE IF EXISTS [CompositeAssociationRecord]; DROP TABLE IF EXISTS [Comment]; -DROP TABLE IF EXISTS [Follow]; DROP TABLE IF EXISTS [Employee]; +DROP TABLE IF EXISTS [CompositeAssociationRecord]; DROP TABLE IF EXISTS [Post]; +DROP TABLE IF EXISTS [Follow]; DROP TABLE IF EXISTS [Workspace]; -DROP TABLE IF EXISTS [Building]; -DROP TABLE IF EXISTS [IntIdRecord]; -DROP TABLE IF EXISTS [User]; -DROP TABLE IF EXISTS [AllTypes]; -DROP TABLE IF EXISTS [DecimalIdRecord]; -DROP TABLE IF EXISTS [StringIdRecord]; -DROP TABLE IF EXISTS [AllTypesIdRecord]; -DROP TABLE IF EXISTS [Department]; -DROP TABLE IF EXISTS [BooleanIdRecord]; -DROP TABLE IF EXISTS [OrderItem]; DROP TABLE IF EXISTS [FloatIdRecord]; +DROP TABLE IF EXISTS [OrderItem]; +DROP TABLE IF EXISTS [BooleanIdRecord]; +DROP TABLE IF EXISTS [Department]; +DROP TABLE IF EXISTS [AllTypesIdRecord]; +DROP TABLE IF EXISTS [StringIdRecord]; +DROP TABLE IF EXISTS [DecimalIdRecord]; +DROP TABLE IF EXISTS [AllTypes]; +DROP TABLE IF EXISTS [User]; +DROP TABLE IF EXISTS [IntIdRecord]; +DROP TABLE IF EXISTS [Building]; -CREATE TABLE [FloatIdRecord] ( - [id] FLOAT NOT NULL, - [randomField] VARCHAR(191) NOT NULL, - PRIMARY KEY([id]) -); - -CREATE TABLE [OrderItem] ( - [orderId] VARCHAR(191) NOT NULL, - [itemId] VARCHAR(191) NOT NULL, - [quantity] INT NOT NULL, - [notes] VARCHAR(191) NOT NULL, - PRIMARY KEY([orderId],[itemId]) -); - -CREATE TABLE [BooleanIdRecord] ( - [id] BIT NOT NULL, - [randomField] VARCHAR(191) NOT NULL, - PRIMARY KEY([id]) -); - -CREATE TABLE [Department] ( - [deptNo] VARCHAR(191) NOT NULL, - [deptName] VARCHAR(191) NOT NULL, - PRIMARY KEY([deptNo]) -); - -CREATE TABLE [AllTypesIdRecord] ( - [booleanType] BIT NOT NULL, - [intType] INT NOT NULL, - [floatType] FLOAT NOT NULL, - [decimalType] DECIMAL(38,30) NOT NULL, - [stringType] VARCHAR(191) NOT NULL, - [randomField] VARCHAR(191) NOT NULL, - PRIMARY KEY([booleanType],[intType],[floatType],[decimalType],[stringType]) +CREATE TABLE [Building] ( + [buildingCode] VARCHAR(191) NOT NULL, + [city] VARCHAR(191) NOT NULL, + [state] VARCHAR(191) NOT NULL, + [country] VARCHAR(191) NOT NULL, + [postalCode] VARCHAR(191) NOT NULL, + [type] VARCHAR(191) NOT NULL, + PRIMARY KEY([buildingCode]) ); -CREATE TABLE [StringIdRecord] ( - [id] VARCHAR(191) NOT NULL, +CREATE TABLE [IntIdRecord] ( + [id] INT NOT NULL, [randomField] VARCHAR(191) NOT NULL, PRIMARY KEY([id]) ); -CREATE TABLE [DecimalIdRecord] ( - [id] DECIMAL(38,30) NOT NULL, - [randomField] VARCHAR(191) NOT NULL, +CREATE TABLE [User] ( + [id] INT NOT NULL, + [name] VARCHAR(191) NOT NULL, + [birthDate] DATE NOT NULL, + [mobileNumber] VARCHAR(191) NOT NULL, PRIMARY KEY([id]) ); @@ -96,28 +72,52 @@ CREATE TABLE [AllTypes] ( PRIMARY KEY([id]) ); -CREATE TABLE [User] ( - [id] INT NOT NULL, - [name] VARCHAR(191) NOT NULL, - [birthDate] DATE NOT NULL, - [mobileNumber] VARCHAR(191) NOT NULL, +CREATE TABLE [DecimalIdRecord] ( + [id] DECIMAL(38,30) NOT NULL, + [randomField] VARCHAR(191) NOT NULL, PRIMARY KEY([id]) ); -CREATE TABLE [IntIdRecord] ( - [id] INT NOT NULL, +CREATE TABLE [StringIdRecord] ( + [id] VARCHAR(191) NOT NULL, [randomField] VARCHAR(191) NOT NULL, PRIMARY KEY([id]) ); -CREATE TABLE [Building] ( - [buildingCode] VARCHAR(191) NOT NULL, - [city] VARCHAR(191) NOT NULL, - [state] VARCHAR(191) NOT NULL, - [country] VARCHAR(191) NOT NULL, - [postalCode] VARCHAR(191) NOT NULL, - [type] VARCHAR(191) NOT NULL, - PRIMARY KEY([buildingCode]) +CREATE TABLE [AllTypesIdRecord] ( + [booleanType] BIT NOT NULL, + [intType] INT NOT NULL, + [floatType] FLOAT NOT NULL, + [decimalType] DECIMAL(38,30) NOT NULL, + [stringType] VARCHAR(191) NOT NULL, + [randomField] VARCHAR(191) NOT NULL, + PRIMARY KEY([booleanType],[intType],[floatType],[decimalType],[stringType]) +); + +CREATE TABLE [Department] ( + [deptNo] VARCHAR(191) NOT NULL, + [deptName] VARCHAR(191) NOT NULL, + PRIMARY KEY([deptNo]) +); + +CREATE TABLE [BooleanIdRecord] ( + [id] BIT NOT NULL, + [randomField] VARCHAR(191) NOT NULL, + PRIMARY KEY([id]) +); + +CREATE TABLE [OrderItem] ( + [orderId] VARCHAR(191) NOT NULL, + [itemId] VARCHAR(191) NOT NULL, + [quantity] INT NOT NULL, + [notes] VARCHAR(191) NOT NULL, + PRIMARY KEY([orderId],[itemId]) +); + +CREATE TABLE [FloatIdRecord] ( + [id] FLOAT NOT NULL, + [randomField] VARCHAR(191) NOT NULL, + PRIMARY KEY([id]) ); CREATE TABLE [Workspace] ( @@ -128,6 +128,16 @@ CREATE TABLE [Workspace] ( PRIMARY KEY([workspaceId]) ); +CREATE TABLE [Follow] ( + [id] INT NOT NULL, + [timestamp] DATETIME2 NOT NULL, + [leaderId] INT NOT NULL, + FOREIGN KEY([leaderId]) REFERENCES [User]([id]), + [followerId] INT NOT NULL, + FOREIGN KEY([followerId]) REFERENCES [User]([id]), + PRIMARY KEY([id]) +); + CREATE TABLE [Post] ( [id] INT NOT NULL, [description] VARCHAR(191) NOT NULL, @@ -139,6 +149,19 @@ CREATE TABLE [Post] ( PRIMARY KEY([id]) ); +CREATE TABLE [CompositeAssociationRecord] ( + [id] VARCHAR(191) NOT NULL, + [randomField] VARCHAR(191) NOT NULL, + [alltypesidrecordBooleanType] BIT NOT NULL, + [alltypesidrecordIntType] INT NOT NULL, + [alltypesidrecordFloatType] FLOAT NOT NULL, + [alltypesidrecordDecimalType] DECIMAL(38,30) NOT NULL, + [alltypesidrecordStringType] VARCHAR(191) NOT NULL, + UNIQUE ([alltypesidrecordBooleanType], [alltypesidrecordIntType], [alltypesidrecordFloatType], [alltypesidrecordDecimalType], [alltypesidrecordStringType]), + FOREIGN KEY([alltypesidrecordBooleanType], [alltypesidrecordIntType], [alltypesidrecordFloatType], [alltypesidrecordDecimalType], [alltypesidrecordStringType]) REFERENCES [AllTypesIdRecord]([booleanType], [intType], [floatType], [decimalType], [stringType]), + PRIMARY KEY([id]) +); + CREATE TABLE [Employee] ( [empNo] VARCHAR(191) NOT NULL, [firstName] VARCHAR(191) NOT NULL, @@ -153,16 +176,6 @@ CREATE TABLE [Employee] ( PRIMARY KEY([empNo]) ); -CREATE TABLE [Follow] ( - [id] INT NOT NULL, - [timestamp] DATETIME2 NOT NULL, - [leaderId] INT NOT NULL, - FOREIGN KEY([leaderId]) REFERENCES [User]([id]), - [followerId] INT NOT NULL, - FOREIGN KEY([followerId]) REFERENCES [User]([id]), - PRIMARY KEY([id]) -); - CREATE TABLE [Comment] ( [id] INT NOT NULL, [comment] VARCHAR(191) NOT NULL, @@ -174,15 +187,4 @@ CREATE TABLE [Comment] ( PRIMARY KEY([id]) ); -CREATE TABLE [CompositeAssociationRecord] ( - [id] VARCHAR(191) NOT NULL, - [randomField] VARCHAR(191) NOT NULL, - [alltypesidrecordBooleanType] BIT NOT NULL, - [alltypesidrecordIntType] INT NOT NULL, - [alltypesidrecordFloatType] FLOAT NOT NULL, - [alltypesidrecordDecimalType] DECIMAL(38,30) NOT NULL, - [alltypesidrecordStringType] VARCHAR(191) NOT NULL, - UNIQUE ([alltypesidrecordBooleanType], [alltypesidrecordIntType], [alltypesidrecordFloatType], [alltypesidrecordDecimalType], [alltypesidrecordStringType]), - FOREIGN KEY([alltypesidrecordBooleanType], [alltypesidrecordIntType], [alltypesidrecordFloatType], [alltypesidrecordDecimalType], [alltypesidrecordStringType]) REFERENCES [AllTypesIdRecord]([booleanType], [intType], [floatType], [decimalType], [stringType]), - PRIMARY KEY([id]) -); + diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_59_mssql/modules/entities/script.sql b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_59_mssql/modules/entities/script.sql index 9adca21a2..4875f8991 100644 --- a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_59_mssql/modules/entities/script.sql +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_59_mssql/modules/entities/script.sql @@ -5,23 +5,9 @@ DROP TABLE IF EXISTS [Employee]; DROP TABLE IF EXISTS [Workspace]; -DROP TABLE IF EXISTS [Building]; -DROP TABLE IF EXISTS [Department]; DROP TABLE IF EXISTS [OrderItem]; - -CREATE TABLE [OrderItem] ( - [orderId] VARCHAR(191) NOT NULL, - [itemId] VARCHAR(191) NOT NULL, - [quantity] INT NOT NULL, - [notes] VARCHAR(191) NOT NULL, - PRIMARY KEY([orderId],[itemId]) -); - -CREATE TABLE [Department] ( - [deptNo] VARCHAR(191) NOT NULL, - [deptName] VARCHAR(191) NOT NULL, - PRIMARY KEY([deptNo]) -); +DROP TABLE IF EXISTS [Department]; +DROP TABLE IF EXISTS [Building]; CREATE TABLE [Building] ( [buildingCode] VARCHAR(191) NOT NULL, @@ -33,6 +19,20 @@ CREATE TABLE [Building] ( PRIMARY KEY([buildingCode]) ); +CREATE TABLE [Department] ( + [deptNo] VARCHAR(191) NOT NULL, + [deptName] VARCHAR(191) NOT NULL, + PRIMARY KEY([deptNo]) +); + +CREATE TABLE [OrderItem] ( + [orderId] VARCHAR(191) NOT NULL, + [itemId] VARCHAR(191) NOT NULL, + [quantity] INT NOT NULL, + [notes] VARCHAR(191) NOT NULL, + PRIMARY KEY([orderId],[itemId]) +); + CREATE TABLE [Workspace] ( [workspaceId] VARCHAR(191) NOT NULL, [workspaceType] VARCHAR(191) NOT NULL, @@ -54,3 +54,5 @@ CREATE TABLE [Employee] ( FOREIGN KEY([workspaceWorkspaceId]) REFERENCES [Workspace]([workspaceId]), PRIMARY KEY([empNo]) ); + + diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_60_mssql/modules/entities/persist_test_init.bal b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_60_mssql/modules/entities/persist_test_init.bal index c5fed271c..df96f13f0 100644 --- a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_60_mssql/modules/entities/persist_test_init.bal +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_60_mssql/modules/entities/persist_test_init.bal @@ -10,16 +10,18 @@ isolated final H2Client h2Client = check new ("jdbc:h2:./test", "sa", ""); public isolated function setupTestDB() returns persist:Error? { _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Employee";`); _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Workspace";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Building";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Department";`); _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "OrderItem";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Department";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Building";`); _ = check h2Client->executeNativeSQL(` -CREATE TABLE "OrderItem" ( - "orderId" VARCHAR(191) NOT NULL, - "itemId" VARCHAR(191) NOT NULL, - "quantity" INT NOT NULL, - "notes" VARCHAR(191) NOT NULL, - PRIMARY KEY("orderId","itemId") +CREATE TABLE "Building" ( + "buildingCode" VARCHAR(191) NOT NULL, + "city" VARCHAR(191) NOT NULL, + "state" VARCHAR(191) NOT NULL, + "country" VARCHAR(191) NOT NULL, + "postalCode" VARCHAR(191) NOT NULL, + "type" VARCHAR(191) NOT NULL, + PRIMARY KEY("buildingCode") );`); _ = check h2Client->executeNativeSQL(` CREATE TABLE "Department" ( @@ -29,14 +31,12 @@ CREATE TABLE "Department" ( PRIMARY KEY("deptNo","deptName") );`); _ = check h2Client->executeNativeSQL(` -CREATE TABLE "Building" ( - "buildingCode" VARCHAR(191) NOT NULL, - "city" VARCHAR(191) NOT NULL, - "state" VARCHAR(191) NOT NULL, - "country" VARCHAR(191) NOT NULL, - "postalCode" VARCHAR(191) NOT NULL, - "type" VARCHAR(191) NOT NULL, - PRIMARY KEY("buildingCode") +CREATE TABLE "OrderItem" ( + "orderId" VARCHAR(191) NOT NULL, + "itemId" VARCHAR(191) NOT NULL, + "quantity" INT NOT NULL, + "notes" VARCHAR(191) NOT NULL, + PRIMARY KEY("orderId","itemId") );`); _ = check h2Client->executeNativeSQL(` CREATE TABLE "Workspace" ( @@ -67,8 +67,8 @@ CREATE TABLE "Employee" ( public isolated function cleanupTestDB() returns persist:Error? { _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Employee";`); _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Workspace";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Building";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Department";`); _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "OrderItem";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Department";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Building";`); } diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_60_mssql/modules/entities/script.sql b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_60_mssql/modules/entities/script.sql index aef792ea3..5596b2d10 100644 --- a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_60_mssql/modules/entities/script.sql +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_60_mssql/modules/entities/script.sql @@ -5,16 +5,18 @@ DROP TABLE IF EXISTS [Employee]; DROP TABLE IF EXISTS [Workspace]; -DROP TABLE IF EXISTS [Building]; -DROP TABLE IF EXISTS [Department]; DROP TABLE IF EXISTS [OrderItem]; +DROP TABLE IF EXISTS [Department]; +DROP TABLE IF EXISTS [Building]; -CREATE TABLE [OrderItem] ( - [orderId] VARCHAR(191) NOT NULL, - [itemId] VARCHAR(191) NOT NULL, - [quantity] INT NOT NULL, - [notes] VARCHAR(191) NOT NULL, - PRIMARY KEY([orderId],[itemId]) +CREATE TABLE [Building] ( + [buildingCode] VARCHAR(191) NOT NULL, + [city] VARCHAR(191) NOT NULL, + [state] VARCHAR(191) NOT NULL, + [country] VARCHAR(191) NOT NULL, + [postalCode] VARCHAR(191) NOT NULL, + [type] VARCHAR(191) NOT NULL, + PRIMARY KEY([buildingCode]) ); CREATE TABLE [Department] ( @@ -24,14 +26,12 @@ CREATE TABLE [Department] ( PRIMARY KEY([deptNo],[deptName]) ); -CREATE TABLE [Building] ( - [buildingCode] VARCHAR(191) NOT NULL, - [city] VARCHAR(191) NOT NULL, - [state] VARCHAR(191) NOT NULL, - [country] VARCHAR(191) NOT NULL, - [postalCode] VARCHAR(191) NOT NULL, - [type] VARCHAR(191) NOT NULL, - PRIMARY KEY([buildingCode]) +CREATE TABLE [OrderItem] ( + [orderId] VARCHAR(191) NOT NULL, + [itemId] VARCHAR(191) NOT NULL, + [quantity] INT NOT NULL, + [notes] VARCHAR(191) NOT NULL, + PRIMARY KEY([orderId],[itemId]) ); CREATE TABLE [Workspace] ( @@ -57,3 +57,5 @@ CREATE TABLE [Employee] ( FOREIGN KEY([workspaceWorkspaceId], [workspaceWorkspaceType]) REFERENCES [Workspace]([workspaceId], [workspaceType]), PRIMARY KEY([empNo],[firstName]) ); + + diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_61_mssql/modules/entities/script.sql b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_61_mssql/modules/entities/script.sql index 4a6017953..b87ea6706 100644 --- a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_61_mssql/modules/entities/script.sql +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_61_mssql/modules/entities/script.sql @@ -5,14 +5,8 @@ DROP TABLE IF EXISTS [Workspace]; DROP TABLE IF EXISTS [Employee]; -DROP TABLE IF EXISTS [Building]; DROP TABLE IF EXISTS [Department]; - -CREATE TABLE [Department] ( - [deptNo] VARCHAR(191) NOT NULL, - [deptName] VARCHAR(191) NOT NULL, - PRIMARY KEY([deptNo]) -); +DROP TABLE IF EXISTS [Building]; CREATE TABLE [Building] ( [buildingCode] VARCHAR(191) NOT NULL, @@ -23,6 +17,12 @@ CREATE TABLE [Building] ( PRIMARY KEY([buildingCode]) ); +CREATE TABLE [Department] ( + [deptNo] VARCHAR(191) NOT NULL, + [deptName] VARCHAR(191) NOT NULL, + PRIMARY KEY([deptNo]) +); + CREATE TABLE [Employee] ( [empNo] VARCHAR(191) NOT NULL, [firstName] VARCHAR(191) NOT NULL, @@ -44,3 +44,5 @@ CREATE TABLE [Workspace] ( FOREIGN KEY([employeeEmpNo]) REFERENCES [Employee]([empNo]), PRIMARY KEY([workspaceId]) ); + + diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_62_mssql/modules/entities/script.sql b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_62_mssql/modules/entities/script.sql index 42fc5ba30..c06a6be84 100644 --- a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_62_mssql/modules/entities/script.sql +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_62_mssql/modules/entities/script.sql @@ -3,8 +3,8 @@ -- This file is an auto-generated file by Ballerina persistence layer for model. -- Please verify the generated scripts and execute them against the target DB server. -DROP TABLE IF EXISTS [Follow]; DROP TABLE IF EXISTS [Post]; +DROP TABLE IF EXISTS [Follow]; DROP TABLE IF EXISTS [User]; CREATE TABLE [User] ( @@ -15,6 +15,16 @@ CREATE TABLE [User] ( PRIMARY KEY([id]) ); +CREATE TABLE [Follow] ( + [id] INT NOT NULL, + [created_date] DATE NOT NULL, + [leaderId] INT UNIQUE NOT NULL, + FOREIGN KEY([leaderId]) REFERENCES [User]([id]), + [followerId] INT UNIQUE NOT NULL, + FOREIGN KEY([followerId]) REFERENCES [User]([id]), + PRIMARY KEY([id]) +); + CREATE TABLE [Post] ( [id] INT NOT NULL, [description] VARCHAR(191) NOT NULL, @@ -26,12 +36,4 @@ CREATE TABLE [Post] ( PRIMARY KEY([id]) ); -CREATE TABLE [Follow] ( - [id] INT NOT NULL, - [created_date] DATE NOT NULL, - [leaderId] INT UNIQUE NOT NULL, - FOREIGN KEY([leaderId]) REFERENCES [User]([id]), - [followerId] INT UNIQUE NOT NULL, - FOREIGN KEY([followerId]) REFERENCES [User]([id]), - PRIMARY KEY([id]) -); + diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_63_mssql/modules/entities/script.sql b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_63_mssql/modules/entities/script.sql index 5ff8290b4..5a9de56c4 100644 --- a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_63_mssql/modules/entities/script.sql +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_63_mssql/modules/entities/script.sql @@ -4,8 +4,8 @@ -- Please verify the generated scripts and execute them against the target DB server. DROP TABLE IF EXISTS [Comment]; -DROP TABLE IF EXISTS [Follow]; DROP TABLE IF EXISTS [Post]; +DROP TABLE IF EXISTS [Follow]; DROP TABLE IF EXISTS [User]; CREATE TABLE [User] ( @@ -16,6 +16,16 @@ CREATE TABLE [User] ( PRIMARY KEY([id]) ); +CREATE TABLE [Follow] ( + [id] INT NOT NULL, + [timestamp] DATETIME2 NOT NULL, + [leaderId] INT NOT NULL, + FOREIGN KEY([leaderId]) REFERENCES [User]([id]), + [followerId] INT NOT NULL, + FOREIGN KEY([followerId]) REFERENCES [User]([id]), + PRIMARY KEY([id]) +); + CREATE TABLE [Post] ( [id] INT NOT NULL, [description] VARCHAR(191) NOT NULL, @@ -27,16 +37,6 @@ CREATE TABLE [Post] ( PRIMARY KEY([id]) ); -CREATE TABLE [Follow] ( - [id] INT NOT NULL, - [timestamp] DATETIME2 NOT NULL, - [leaderId] INT NOT NULL, - FOREIGN KEY([leaderId]) REFERENCES [User]([id]), - [followerId] INT NOT NULL, - FOREIGN KEY([followerId]) REFERENCES [User]([id]), - PRIMARY KEY([id]) -); - CREATE TABLE [Comment] ( [id] INT NOT NULL, [comment] VARCHAR(191) NOT NULL, @@ -47,3 +47,5 @@ CREATE TABLE [Comment] ( FOREIGN KEY([postId]) REFERENCES [Post]([id]), PRIMARY KEY([id]) ); + + diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_64/modules/x.y.z/script.sql b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_64/modules/x.y.z/script.sql index ba7ced356..9c7f228c1 100644 --- a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_64/modules/x.y.z/script.sql +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_64/modules/x.y.z/script.sql @@ -5,14 +5,8 @@ DROP TABLE IF EXISTS `Workspace`; DROP TABLE IF EXISTS `Employee`; -DROP TABLE IF EXISTS `Building`; DROP TABLE IF EXISTS `Department`; - -CREATE TABLE `Department` ( - `deptNo` VARCHAR(10) NOT NULL, - `deptName` VARCHAR(191) NOT NULL, - PRIMARY KEY(`deptNo`) -); +DROP TABLE IF EXISTS `Building`; CREATE TABLE `Building` ( `buildingCode` VARCHAR(191) NOT NULL, @@ -23,6 +17,12 @@ CREATE TABLE `Building` ( PRIMARY KEY(`buildingCode`) ); +CREATE TABLE `Department` ( + `deptNo` VARCHAR(10) NOT NULL, + `deptName` VARCHAR(191) NOT NULL, + PRIMARY KEY(`deptNo`) +); + CREATE TABLE `Employee` ( `empNo` VARCHAR(191) NOT NULL, `firstName` VARCHAR(191) NOT NULL, @@ -44,3 +44,5 @@ CREATE TABLE `Workspace` ( FOREIGN KEY(`employeeEmpNo`) REFERENCES `Employee`(`empNo`), PRIMARY KEY(`workspaceId`) ); + + diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_65/script.sql b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_65/script.sql index 39346dc74..4a4efae91 100644 --- a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_65/script.sql +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_65/script.sql @@ -3,10 +3,18 @@ -- This file is an auto-generated file by Ballerina persistence layer for model. -- Please verify the generated scripts and execute them against the target DB server. -DROP TABLE IF EXISTS `Payment`; DROP TABLE IF EXISTS `OrderItem`; -DROP TABLE IF EXISTS `Order`; +DROP TABLE IF EXISTS `Payment`; DROP TABLE IF EXISTS `Book`; +DROP TABLE IF EXISTS `Order`; + +CREATE TABLE `Order` ( + `orderId` VARCHAR(191) NOT NULL, + `customerId` VARCHAR(191) NOT NULL, + `createdAt` VARCHAR(191) NOT NULL, + `totalPrice` DECIMAL(65,30) NOT NULL, + PRIMARY KEY(`orderId`) +); CREATE TABLE `Book` ( `bookId` VARCHAR(191) NOT NULL, @@ -17,12 +25,13 @@ CREATE TABLE `Book` ( PRIMARY KEY(`bookId`) ); -CREATE TABLE `Order` ( - `orderId` VARCHAR(191) NOT NULL, - `customerId` VARCHAR(191) NOT NULL, - `createdAt` VARCHAR(191) NOT NULL, - `totalPrice` DECIMAL(65,30) NOT NULL, - PRIMARY KEY(`orderId`) +CREATE TABLE `Payment` ( + `paymentId` VARCHAR(191) NOT NULL, + `paymentAmount` DECIMAL(65,30) NOT NULL, + `paymentDate` VARCHAR(191) NOT NULL, + `orderOrderId` VARCHAR(191) UNIQUE NOT NULL, + FOREIGN KEY(`orderOrderId`) REFERENCES `Order`(`orderId`), + PRIMARY KEY(`paymentId`) ); CREATE TABLE `OrderItem` ( @@ -36,11 +45,4 @@ CREATE TABLE `OrderItem` ( PRIMARY KEY(`orderItemId`) ); -CREATE TABLE `Payment` ( - `paymentId` VARCHAR(191) NOT NULL, - `paymentAmount` DECIMAL(65,30) NOT NULL, - `paymentDate` VARCHAR(191) NOT NULL, - `orderOrderId` VARCHAR(191) UNIQUE NOT NULL, - FOREIGN KEY(`orderOrderId`) REFERENCES `Order`(`orderId`), - PRIMARY KEY(`paymentId`) -); + diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_66_postgresql/modules/entities/persist_test_init.bal b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_66_postgresql/modules/entities/persist_test_init.bal index 1f8d55d37..8288e3606 100644 --- a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_66_postgresql/modules/entities/persist_test_init.bal +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_66_postgresql/modules/entities/persist_test_init.bal @@ -8,69 +8,45 @@ import ballerina/persist; isolated final H2Client h2Client = check new ("jdbc:h2:./test", "sa", ""); public isolated function setupTestDB() returns persist:Error? { - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "CompositeAssociationRecord";`); _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Comment";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Follow";`); _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Employee";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "CompositeAssociationRecord";`); _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Post";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Follow";`); _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Workspace";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Building";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "IntIdRecord";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "User";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "AllTypes";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "DecimalIdRecord";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "StringIdRecord";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "AllTypesIdRecord";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Department";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "BooleanIdRecord";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "OrderItem";`); _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "FloatIdRecord";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "OrderItem";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "BooleanIdRecord";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Department";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "AllTypesIdRecord";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "StringIdRecord";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "DecimalIdRecord";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "AllTypes";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "User";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "IntIdRecord";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Building";`); _ = check h2Client->executeNativeSQL(` -CREATE TABLE "FloatIdRecord" ( - "id" FLOAT NOT NULL, - "randomField" VARCHAR(191) NOT NULL, - PRIMARY KEY("id") -);`); - _ = check h2Client->executeNativeSQL(` -CREATE TABLE "OrderItem" ( - "orderId" VARCHAR(191) NOT NULL, - "itemId" VARCHAR(191) NOT NULL, - "quantity" INT NOT NULL, - "notes" VARCHAR(191) NOT NULL, - PRIMARY KEY("orderId","itemId") -);`); - _ = check h2Client->executeNativeSQL(` -CREATE TABLE "BooleanIdRecord" ( - "id" BOOLEAN NOT NULL, - "randomField" VARCHAR(191) NOT NULL, - PRIMARY KEY("id") -);`); - _ = check h2Client->executeNativeSQL(` -CREATE TABLE "Department" ( - "deptNo" VARCHAR(191) NOT NULL, - "deptName" VARCHAR(191) NOT NULL, - PRIMARY KEY("deptNo") -);`); - _ = check h2Client->executeNativeSQL(` -CREATE TABLE "AllTypesIdRecord" ( - "booleanType" BOOLEAN NOT NULL, - "intType" INT NOT NULL, - "floatType" FLOAT NOT NULL, - "decimalType" DECIMAL(65,30) NOT NULL, - "stringType" VARCHAR(191) NOT NULL, - "randomField" VARCHAR(191) NOT NULL, - PRIMARY KEY("booleanType","intType","floatType","decimalType","stringType") +CREATE TABLE "Building" ( + "buildingCode" VARCHAR(191) NOT NULL, + "city" VARCHAR(191) NOT NULL, + "state" VARCHAR(191) NOT NULL, + "country" VARCHAR(191) NOT NULL, + "postalCode" VARCHAR(191) NOT NULL, + "type" VARCHAR(191) NOT NULL, + PRIMARY KEY("buildingCode") );`); _ = check h2Client->executeNativeSQL(` -CREATE TABLE "StringIdRecord" ( - "id" VARCHAR(191) NOT NULL, +CREATE TABLE "IntIdRecord" ( + "id" INT NOT NULL, "randomField" VARCHAR(191) NOT NULL, PRIMARY KEY("id") );`); _ = check h2Client->executeNativeSQL(` -CREATE TABLE "DecimalIdRecord" ( - "id" DECIMAL(65,30) NOT NULL, - "randomField" VARCHAR(191) NOT NULL, +CREATE TABLE "User" ( + "id" INT NOT NULL, + "name" VARCHAR(191) NOT NULL, + "birthDate" DATE NOT NULL, + "mobileNumber" VARCHAR(191) NOT NULL, PRIMARY KEY("id") );`); _ = check h2Client->executeNativeSQL(` @@ -101,28 +77,52 @@ CREATE TABLE "AllTypes" ( PRIMARY KEY("id") );`); _ = check h2Client->executeNativeSQL(` -CREATE TABLE "User" ( - "id" INT NOT NULL, - "name" VARCHAR(191) NOT NULL, - "birthDate" DATE NOT NULL, - "mobileNumber" VARCHAR(191) NOT NULL, +CREATE TABLE "DecimalIdRecord" ( + "id" DECIMAL(65,30) NOT NULL, + "randomField" VARCHAR(191) NOT NULL, PRIMARY KEY("id") );`); _ = check h2Client->executeNativeSQL(` -CREATE TABLE "IntIdRecord" ( - "id" INT NOT NULL, +CREATE TABLE "StringIdRecord" ( + "id" VARCHAR(191) NOT NULL, "randomField" VARCHAR(191) NOT NULL, PRIMARY KEY("id") );`); _ = check h2Client->executeNativeSQL(` -CREATE TABLE "Building" ( - "buildingCode" VARCHAR(191) NOT NULL, - "city" VARCHAR(191) NOT NULL, - "state" VARCHAR(191) NOT NULL, - "country" VARCHAR(191) NOT NULL, - "postalCode" VARCHAR(191) NOT NULL, - "type" VARCHAR(191) NOT NULL, - PRIMARY KEY("buildingCode") +CREATE TABLE "AllTypesIdRecord" ( + "booleanType" BOOLEAN NOT NULL, + "intType" INT NOT NULL, + "floatType" FLOAT NOT NULL, + "decimalType" DECIMAL(65,30) NOT NULL, + "stringType" VARCHAR(191) NOT NULL, + "randomField" VARCHAR(191) NOT NULL, + PRIMARY KEY("booleanType","intType","floatType","decimalType","stringType") +);`); + _ = check h2Client->executeNativeSQL(` +CREATE TABLE "Department" ( + "deptNo" VARCHAR(191) NOT NULL, + "deptName" VARCHAR(191) NOT NULL, + PRIMARY KEY("deptNo") +);`); + _ = check h2Client->executeNativeSQL(` +CREATE TABLE "BooleanIdRecord" ( + "id" BOOLEAN NOT NULL, + "randomField" VARCHAR(191) NOT NULL, + PRIMARY KEY("id") +);`); + _ = check h2Client->executeNativeSQL(` +CREATE TABLE "OrderItem" ( + "orderId" VARCHAR(191) NOT NULL, + "itemId" VARCHAR(191) NOT NULL, + "quantity" INT NOT NULL, + "notes" VARCHAR(191) NOT NULL, + PRIMARY KEY("orderId","itemId") +);`); + _ = check h2Client->executeNativeSQL(` +CREATE TABLE "FloatIdRecord" ( + "id" FLOAT NOT NULL, + "randomField" VARCHAR(191) NOT NULL, + PRIMARY KEY("id") );`); _ = check h2Client->executeNativeSQL(` CREATE TABLE "Workspace" ( @@ -133,6 +133,16 @@ CREATE TABLE "Workspace" ( PRIMARY KEY("workspaceId") );`); _ = check h2Client->executeNativeSQL(` +CREATE TABLE "Follow" ( + "id" INT NOT NULL, + "timestamp" DATETIME NOT NULL, + "leaderId" INT NOT NULL, + FOREIGN KEY("leaderId") REFERENCES "User"("id"), + "followerId" INT NOT NULL, + FOREIGN KEY("followerId") REFERENCES "User"("id"), + PRIMARY KEY("id") +);`); + _ = check h2Client->executeNativeSQL(` CREATE TABLE "Post" ( "id" INT NOT NULL, "description" VARCHAR(191) NOT NULL, @@ -144,6 +154,19 @@ CREATE TABLE "Post" ( PRIMARY KEY("id") );`); _ = check h2Client->executeNativeSQL(` +CREATE TABLE "CompositeAssociationRecord" ( + "id" VARCHAR(191) NOT NULL, + "randomField" VARCHAR(191) NOT NULL, + "alltypesidrecordBooleanType" BOOLEAN NOT NULL, + "alltypesidrecordIntType" INT NOT NULL, + "alltypesidrecordFloatType" FLOAT NOT NULL, + "alltypesidrecordDecimalType" DECIMAL(65,30) NOT NULL, + "alltypesidrecordStringType" VARCHAR(191) NOT NULL, + UNIQUE ("alltypesidrecordBooleanType", "alltypesidrecordIntType", "alltypesidrecordFloatType", "alltypesidrecordDecimalType", "alltypesidrecordStringType"), + FOREIGN KEY("alltypesidrecordBooleanType", "alltypesidrecordIntType", "alltypesidrecordFloatType", "alltypesidrecordDecimalType", "alltypesidrecordStringType") REFERENCES "AllTypesIdRecord"("booleanType", "intType", "floatType", "decimalType", "stringType"), + PRIMARY KEY("id") +);`); + _ = check h2Client->executeNativeSQL(` CREATE TABLE "Employee" ( "empNo" VARCHAR(191) NOT NULL, "firstName" VARCHAR(191) NOT NULL, @@ -158,16 +181,6 @@ CREATE TABLE "Employee" ( PRIMARY KEY("empNo") );`); _ = check h2Client->executeNativeSQL(` -CREATE TABLE "Follow" ( - "id" INT NOT NULL, - "timestamp" DATETIME NOT NULL, - "leaderId" INT NOT NULL, - FOREIGN KEY("leaderId") REFERENCES "User"("id"), - "followerId" INT NOT NULL, - FOREIGN KEY("followerId") REFERENCES "User"("id"), - PRIMARY KEY("id") -);`); - _ = check h2Client->executeNativeSQL(` CREATE TABLE "Comment" ( "id" INT NOT NULL, "comment" VARCHAR(191) NOT NULL, @@ -177,39 +190,26 @@ CREATE TABLE "Comment" ( "postId" INT NOT NULL, FOREIGN KEY("postId") REFERENCES "Post"("id"), PRIMARY KEY("id") -);`); - _ = check h2Client->executeNativeSQL(` -CREATE TABLE "CompositeAssociationRecord" ( - "id" VARCHAR(191) NOT NULL, - "randomField" VARCHAR(191) NOT NULL, - "alltypesidrecordBooleanType" BOOLEAN NOT NULL, - "alltypesidrecordIntType" INT NOT NULL, - "alltypesidrecordFloatType" FLOAT NOT NULL, - "alltypesidrecordDecimalType" DECIMAL(65,30) NOT NULL, - "alltypesidrecordStringType" VARCHAR(191) NOT NULL, - UNIQUE ("alltypesidrecordBooleanType", "alltypesidrecordIntType", "alltypesidrecordFloatType", "alltypesidrecordDecimalType", "alltypesidrecordStringType"), - FOREIGN KEY("alltypesidrecordBooleanType", "alltypesidrecordIntType", "alltypesidrecordFloatType", "alltypesidrecordDecimalType", "alltypesidrecordStringType") REFERENCES "AllTypesIdRecord"("booleanType", "intType", "floatType", "decimalType", "stringType"), - PRIMARY KEY("id") );`); } public isolated function cleanupTestDB() returns persist:Error? { - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "CompositeAssociationRecord";`); _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Comment";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Follow";`); _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Employee";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "CompositeAssociationRecord";`); _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Post";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Follow";`); _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Workspace";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Building";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "IntIdRecord";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "User";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "AllTypes";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "DecimalIdRecord";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "StringIdRecord";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "AllTypesIdRecord";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Department";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "BooleanIdRecord";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "OrderItem";`); _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "FloatIdRecord";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "OrderItem";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "BooleanIdRecord";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Department";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "AllTypesIdRecord";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "StringIdRecord";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "DecimalIdRecord";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "AllTypes";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "User";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "IntIdRecord";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Building";`); } diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_66_postgresql/modules/entities/script.sql b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_66_postgresql/modules/entities/script.sql index c2995129f..65b171f60 100644 --- a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_66_postgresql/modules/entities/script.sql +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_66_postgresql/modules/entities/script.sql @@ -3,69 +3,45 @@ -- This file is an auto-generated file by Ballerina persistence layer for model. -- Please verify the generated scripts and execute them against the target DB server. -DROP TABLE IF EXISTS "CompositeAssociationRecord"; DROP TABLE IF EXISTS "Comment"; -DROP TABLE IF EXISTS "Follow"; DROP TABLE IF EXISTS "Employee"; +DROP TABLE IF EXISTS "CompositeAssociationRecord"; DROP TABLE IF EXISTS "Post"; +DROP TABLE IF EXISTS "Follow"; DROP TABLE IF EXISTS "Workspace"; -DROP TABLE IF EXISTS "Building"; -DROP TABLE IF EXISTS "IntIdRecord"; -DROP TABLE IF EXISTS "User"; -DROP TABLE IF EXISTS "AllTypes"; -DROP TABLE IF EXISTS "DecimalIdRecord"; -DROP TABLE IF EXISTS "StringIdRecord"; -DROP TABLE IF EXISTS "AllTypesIdRecord"; -DROP TABLE IF EXISTS "Department"; -DROP TABLE IF EXISTS "BooleanIdRecord"; -DROP TABLE IF EXISTS "OrderItem"; DROP TABLE IF EXISTS "FloatIdRecord"; +DROP TABLE IF EXISTS "OrderItem"; +DROP TABLE IF EXISTS "BooleanIdRecord"; +DROP TABLE IF EXISTS "Department"; +DROP TABLE IF EXISTS "AllTypesIdRecord"; +DROP TABLE IF EXISTS "StringIdRecord"; +DROP TABLE IF EXISTS "DecimalIdRecord"; +DROP TABLE IF EXISTS "AllTypes"; +DROP TABLE IF EXISTS "User"; +DROP TABLE IF EXISTS "IntIdRecord"; +DROP TABLE IF EXISTS "Building"; -CREATE TABLE "FloatIdRecord" ( - "id" FLOAT NOT NULL, - "randomField" VARCHAR(191) NOT NULL, - PRIMARY KEY("id") -); - -CREATE TABLE "OrderItem" ( - "orderId" VARCHAR(191) NOT NULL, - "itemId" VARCHAR(191) NOT NULL, - "quantity" INT NOT NULL, - "notes" VARCHAR(191) NOT NULL, - PRIMARY KEY("orderId","itemId") -); - -CREATE TABLE "BooleanIdRecord" ( - "id" BOOLEAN NOT NULL, - "randomField" VARCHAR(191) NOT NULL, - PRIMARY KEY("id") -); - -CREATE TABLE "Department" ( - "deptNo" VARCHAR(191) NOT NULL, - "deptName" VARCHAR(191) NOT NULL, - PRIMARY KEY("deptNo") -); - -CREATE TABLE "AllTypesIdRecord" ( - "booleanType" BOOLEAN NOT NULL, - "intType" INT NOT NULL, - "floatType" FLOAT NOT NULL, - "decimalType" DECIMAL(65,30) NOT NULL, - "stringType" VARCHAR(191) NOT NULL, - "randomField" VARCHAR(191) NOT NULL, - PRIMARY KEY("booleanType","intType","floatType","decimalType","stringType") +CREATE TABLE "Building" ( + "buildingCode" VARCHAR(191) NOT NULL, + "city" VARCHAR(191) NOT NULL, + "state" VARCHAR(191) NOT NULL, + "country" VARCHAR(191) NOT NULL, + "postalCode" VARCHAR(191) NOT NULL, + "type" VARCHAR(191) NOT NULL, + PRIMARY KEY("buildingCode") ); -CREATE TABLE "StringIdRecord" ( - "id" VARCHAR(191) NOT NULL, +CREATE TABLE "IntIdRecord" ( + "id" INT NOT NULL, "randomField" VARCHAR(191) NOT NULL, PRIMARY KEY("id") ); -CREATE TABLE "DecimalIdRecord" ( - "id" DECIMAL(65,30) NOT NULL, - "randomField" VARCHAR(191) NOT NULL, +CREATE TABLE "User" ( + "id" INT NOT NULL, + "name" VARCHAR(191) NOT NULL, + "birthDate" DATE NOT NULL, + "mobileNumber" VARCHAR(191) NOT NULL, PRIMARY KEY("id") ); @@ -96,28 +72,52 @@ CREATE TABLE "AllTypes" ( PRIMARY KEY("id") ); -CREATE TABLE "User" ( - "id" INT NOT NULL, - "name" VARCHAR(191) NOT NULL, - "birthDate" DATE NOT NULL, - "mobileNumber" VARCHAR(191) NOT NULL, +CREATE TABLE "DecimalIdRecord" ( + "id" DECIMAL(65,30) NOT NULL, + "randomField" VARCHAR(191) NOT NULL, PRIMARY KEY("id") ); -CREATE TABLE "IntIdRecord" ( - "id" INT NOT NULL, +CREATE TABLE "StringIdRecord" ( + "id" VARCHAR(191) NOT NULL, "randomField" VARCHAR(191) NOT NULL, PRIMARY KEY("id") ); -CREATE TABLE "Building" ( - "buildingCode" VARCHAR(191) NOT NULL, - "city" VARCHAR(191) NOT NULL, - "state" VARCHAR(191) NOT NULL, - "country" VARCHAR(191) NOT NULL, - "postalCode" VARCHAR(191) NOT NULL, - "type" VARCHAR(191) NOT NULL, - PRIMARY KEY("buildingCode") +CREATE TABLE "AllTypesIdRecord" ( + "booleanType" BOOLEAN NOT NULL, + "intType" INT NOT NULL, + "floatType" FLOAT NOT NULL, + "decimalType" DECIMAL(65,30) NOT NULL, + "stringType" VARCHAR(191) NOT NULL, + "randomField" VARCHAR(191) NOT NULL, + PRIMARY KEY("booleanType","intType","floatType","decimalType","stringType") +); + +CREATE TABLE "Department" ( + "deptNo" VARCHAR(191) NOT NULL, + "deptName" VARCHAR(191) NOT NULL, + PRIMARY KEY("deptNo") +); + +CREATE TABLE "BooleanIdRecord" ( + "id" BOOLEAN NOT NULL, + "randomField" VARCHAR(191) NOT NULL, + PRIMARY KEY("id") +); + +CREATE TABLE "OrderItem" ( + "orderId" VARCHAR(191) NOT NULL, + "itemId" VARCHAR(191) NOT NULL, + "quantity" INT NOT NULL, + "notes" VARCHAR(191) NOT NULL, + PRIMARY KEY("orderId","itemId") +); + +CREATE TABLE "FloatIdRecord" ( + "id" FLOAT NOT NULL, + "randomField" VARCHAR(191) NOT NULL, + PRIMARY KEY("id") ); CREATE TABLE "Workspace" ( @@ -128,6 +128,16 @@ CREATE TABLE "Workspace" ( PRIMARY KEY("workspaceId") ); +CREATE TABLE "Follow" ( + "id" INT NOT NULL, + "timestamp" TIMESTAMP NOT NULL, + "leaderId" INT NOT NULL, + FOREIGN KEY("leaderId") REFERENCES "User"("id"), + "followerId" INT NOT NULL, + FOREIGN KEY("followerId") REFERENCES "User"("id"), + PRIMARY KEY("id") +); + CREATE TABLE "Post" ( "id" INT NOT NULL, "description" VARCHAR(191) NOT NULL, @@ -139,6 +149,19 @@ CREATE TABLE "Post" ( PRIMARY KEY("id") ); +CREATE TABLE "CompositeAssociationRecord" ( + "id" VARCHAR(191) NOT NULL, + "randomField" VARCHAR(191) NOT NULL, + "alltypesidrecordBooleanType" BOOLEAN NOT NULL, + "alltypesidrecordIntType" INT NOT NULL, + "alltypesidrecordFloatType" FLOAT NOT NULL, + "alltypesidrecordDecimalType" DECIMAL(65,30) NOT NULL, + "alltypesidrecordStringType" VARCHAR(191) NOT NULL, + UNIQUE ("alltypesidrecordBooleanType", "alltypesidrecordIntType", "alltypesidrecordFloatType", "alltypesidrecordDecimalType", "alltypesidrecordStringType"), + FOREIGN KEY("alltypesidrecordBooleanType", "alltypesidrecordIntType", "alltypesidrecordFloatType", "alltypesidrecordDecimalType", "alltypesidrecordStringType") REFERENCES "AllTypesIdRecord"("booleanType", "intType", "floatType", "decimalType", "stringType"), + PRIMARY KEY("id") +); + CREATE TABLE "Employee" ( "empNo" VARCHAR(191) NOT NULL, "firstName" VARCHAR(191) NOT NULL, @@ -153,16 +176,6 @@ CREATE TABLE "Employee" ( PRIMARY KEY("empNo") ); -CREATE TABLE "Follow" ( - "id" INT NOT NULL, - "timestamp" TIMESTAMP NOT NULL, - "leaderId" INT NOT NULL, - FOREIGN KEY("leaderId") REFERENCES "User"("id"), - "followerId" INT NOT NULL, - FOREIGN KEY("followerId") REFERENCES "User"("id"), - PRIMARY KEY("id") -); - CREATE TABLE "Comment" ( "id" INT NOT NULL, "comment" VARCHAR(191) NOT NULL, @@ -174,17 +187,4 @@ CREATE TABLE "Comment" ( PRIMARY KEY("id") ); -CREATE TABLE "CompositeAssociationRecord" ( - "id" VARCHAR(191) NOT NULL, - "randomField" VARCHAR(191) NOT NULL, - "alltypesidrecordBooleanType" BOOLEAN NOT NULL, - "alltypesidrecordIntType" INT NOT NULL, - "alltypesidrecordFloatType" FLOAT NOT NULL, - "alltypesidrecordDecimalType" DECIMAL(65,30) NOT NULL, - "alltypesidrecordStringType" VARCHAR(191) NOT NULL, - UNIQUE ("alltypesidrecordBooleanType", "alltypesidrecordIntType", "alltypesidrecordFloatType", "alltypesidrecordDecimalType", "alltypesidrecordStringType"), - FOREIGN KEY("alltypesidrecordBooleanType", "alltypesidrecordIntType", "alltypesidrecordFloatType", "alltypesidrecordDecimalType", "alltypesidrecordStringType") REFERENCES "AllTypesIdRecord"("booleanType", "intType", "floatType", "decimalType", "stringType"), - PRIMARY KEY("id") -); - diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_67_postgresql/modules/entities/script.sql b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_67_postgresql/modules/entities/script.sql index a19c482d5..ef43e8652 100644 --- a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_67_postgresql/modules/entities/script.sql +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_67_postgresql/modules/entities/script.sql @@ -5,23 +5,9 @@ DROP TABLE IF EXISTS "Employee"; DROP TABLE IF EXISTS "Workspace"; -DROP TABLE IF EXISTS "Building"; -DROP TABLE IF EXISTS "Department"; DROP TABLE IF EXISTS "OrderItem"; - -CREATE TABLE "OrderItem" ( - "orderId" VARCHAR(191) NOT NULL, - "itemId" VARCHAR(191) NOT NULL, - "quantity" INT NOT NULL, - "notes" VARCHAR(191) NOT NULL, - PRIMARY KEY("orderId","itemId") -); - -CREATE TABLE "Department" ( - "deptNo" VARCHAR(191) NOT NULL, - "deptName" VARCHAR(191) NOT NULL, - PRIMARY KEY("deptNo") -); +DROP TABLE IF EXISTS "Department"; +DROP TABLE IF EXISTS "Building"; CREATE TABLE "Building" ( "buildingCode" VARCHAR(191) NOT NULL, @@ -33,6 +19,20 @@ CREATE TABLE "Building" ( PRIMARY KEY("buildingCode") ); +CREATE TABLE "Department" ( + "deptNo" VARCHAR(191) NOT NULL, + "deptName" VARCHAR(191) NOT NULL, + PRIMARY KEY("deptNo") +); + +CREATE TABLE "OrderItem" ( + "orderId" VARCHAR(191) NOT NULL, + "itemId" VARCHAR(191) NOT NULL, + "quantity" INT NOT NULL, + "notes" VARCHAR(191) NOT NULL, + PRIMARY KEY("orderId","itemId") +); + CREATE TABLE "Workspace" ( "workspaceId" VARCHAR(191) NOT NULL, "workspaceType" VARCHAR(191) NOT NULL, diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_68_postgresql/modules/entities/persist_test_init.bal b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_68_postgresql/modules/entities/persist_test_init.bal index c5fed271c..df96f13f0 100644 --- a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_68_postgresql/modules/entities/persist_test_init.bal +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_68_postgresql/modules/entities/persist_test_init.bal @@ -10,16 +10,18 @@ isolated final H2Client h2Client = check new ("jdbc:h2:./test", "sa", ""); public isolated function setupTestDB() returns persist:Error? { _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Employee";`); _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Workspace";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Building";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Department";`); _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "OrderItem";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Department";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Building";`); _ = check h2Client->executeNativeSQL(` -CREATE TABLE "OrderItem" ( - "orderId" VARCHAR(191) NOT NULL, - "itemId" VARCHAR(191) NOT NULL, - "quantity" INT NOT NULL, - "notes" VARCHAR(191) NOT NULL, - PRIMARY KEY("orderId","itemId") +CREATE TABLE "Building" ( + "buildingCode" VARCHAR(191) NOT NULL, + "city" VARCHAR(191) NOT NULL, + "state" VARCHAR(191) NOT NULL, + "country" VARCHAR(191) NOT NULL, + "postalCode" VARCHAR(191) NOT NULL, + "type" VARCHAR(191) NOT NULL, + PRIMARY KEY("buildingCode") );`); _ = check h2Client->executeNativeSQL(` CREATE TABLE "Department" ( @@ -29,14 +31,12 @@ CREATE TABLE "Department" ( PRIMARY KEY("deptNo","deptName") );`); _ = check h2Client->executeNativeSQL(` -CREATE TABLE "Building" ( - "buildingCode" VARCHAR(191) NOT NULL, - "city" VARCHAR(191) NOT NULL, - "state" VARCHAR(191) NOT NULL, - "country" VARCHAR(191) NOT NULL, - "postalCode" VARCHAR(191) NOT NULL, - "type" VARCHAR(191) NOT NULL, - PRIMARY KEY("buildingCode") +CREATE TABLE "OrderItem" ( + "orderId" VARCHAR(191) NOT NULL, + "itemId" VARCHAR(191) NOT NULL, + "quantity" INT NOT NULL, + "notes" VARCHAR(191) NOT NULL, + PRIMARY KEY("orderId","itemId") );`); _ = check h2Client->executeNativeSQL(` CREATE TABLE "Workspace" ( @@ -67,8 +67,8 @@ CREATE TABLE "Employee" ( public isolated function cleanupTestDB() returns persist:Error? { _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Employee";`); _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Workspace";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Building";`); - _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Department";`); _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "OrderItem";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Department";`); + _ = check h2Client->executeNativeSQL(`DROP TABLE IF EXISTS "Building";`); } diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_68_postgresql/modules/entities/script.sql b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_68_postgresql/modules/entities/script.sql index 2acacb90c..da9ea1ac8 100644 --- a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_68_postgresql/modules/entities/script.sql +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_68_postgresql/modules/entities/script.sql @@ -5,16 +5,18 @@ DROP TABLE IF EXISTS "Employee"; DROP TABLE IF EXISTS "Workspace"; -DROP TABLE IF EXISTS "Building"; -DROP TABLE IF EXISTS "Department"; DROP TABLE IF EXISTS "OrderItem"; +DROP TABLE IF EXISTS "Department"; +DROP TABLE IF EXISTS "Building"; -CREATE TABLE "OrderItem" ( - "orderId" VARCHAR(191) NOT NULL, - "itemId" VARCHAR(191) NOT NULL, - "quantity" INT NOT NULL, - "notes" VARCHAR(191) NOT NULL, - PRIMARY KEY("orderId","itemId") +CREATE TABLE "Building" ( + "buildingCode" VARCHAR(191) NOT NULL, + "city" VARCHAR(191) NOT NULL, + "state" VARCHAR(191) NOT NULL, + "country" VARCHAR(191) NOT NULL, + "postalCode" VARCHAR(191) NOT NULL, + "type" VARCHAR(191) NOT NULL, + PRIMARY KEY("buildingCode") ); CREATE TABLE "Department" ( @@ -24,14 +26,12 @@ CREATE TABLE "Department" ( PRIMARY KEY("deptNo","deptName") ); -CREATE TABLE "Building" ( - "buildingCode" VARCHAR(191) NOT NULL, - "city" VARCHAR(191) NOT NULL, - "state" VARCHAR(191) NOT NULL, - "country" VARCHAR(191) NOT NULL, - "postalCode" VARCHAR(191) NOT NULL, - "type" VARCHAR(191) NOT NULL, - PRIMARY KEY("buildingCode") +CREATE TABLE "OrderItem" ( + "orderId" VARCHAR(191) NOT NULL, + "itemId" VARCHAR(191) NOT NULL, + "quantity" INT NOT NULL, + "notes" VARCHAR(191) NOT NULL, + PRIMARY KEY("orderId","itemId") ); CREATE TABLE "Workspace" ( @@ -57,3 +57,5 @@ CREATE TABLE "Employee" ( FOREIGN KEY("workspaceWorkspaceId", "workspaceWorkspaceType") REFERENCES "Workspace"("workspaceId", "workspaceType"), PRIMARY KEY("empNo","firstName") ); + + diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_69_postgresql/modules/entities/script.sql b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_69_postgresql/modules/entities/script.sql index 9ed27be5d..f61e3b6fd 100644 --- a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_69_postgresql/modules/entities/script.sql +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_69_postgresql/modules/entities/script.sql @@ -5,14 +5,8 @@ DROP TABLE IF EXISTS "Workspace"; DROP TABLE IF EXISTS "Employee"; -DROP TABLE IF EXISTS "Building"; DROP TABLE IF EXISTS "Department"; - -CREATE TABLE "Department" ( - "deptNo" VARCHAR(191) NOT NULL, - "deptName" VARCHAR(191) NOT NULL, - PRIMARY KEY("deptNo") -); +DROP TABLE IF EXISTS "Building"; CREATE TABLE "Building" ( "buildingCode" VARCHAR(191) NOT NULL, @@ -23,6 +17,12 @@ CREATE TABLE "Building" ( PRIMARY KEY("buildingCode") ); +CREATE TABLE "Department" ( + "deptNo" VARCHAR(191) NOT NULL, + "deptName" VARCHAR(191) NOT NULL, + PRIMARY KEY("deptNo") +); + CREATE TABLE "Employee" ( "empNo" VARCHAR(191) NOT NULL, "firstName" VARCHAR(191) NOT NULL, @@ -44,3 +44,5 @@ CREATE TABLE "Workspace" ( FOREIGN KEY("employeeEmpNo") REFERENCES "Employee"("empNo"), PRIMARY KEY("workspaceId") ); + + diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_70_postgresql/modules/entities/script.sql b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_70_postgresql/modules/entities/script.sql index 0605b8340..84b9d79f5 100644 --- a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_70_postgresql/modules/entities/script.sql +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_70_postgresql/modules/entities/script.sql @@ -3,8 +3,8 @@ -- This file is an auto-generated file by Ballerina persistence layer for model. -- Please verify the generated scripts and execute them against the target DB server. -DROP TABLE IF EXISTS "Follow"; DROP TABLE IF EXISTS "Post"; +DROP TABLE IF EXISTS "Follow"; DROP TABLE IF EXISTS "User"; CREATE TABLE "User" ( @@ -15,6 +15,16 @@ CREATE TABLE "User" ( PRIMARY KEY("id") ); +CREATE TABLE "Follow" ( + "id" INT NOT NULL, + "created_date" DATE NOT NULL, + "leaderId" INT UNIQUE NOT NULL, + FOREIGN KEY("leaderId") REFERENCES "User"("id"), + "followerId" INT UNIQUE NOT NULL, + FOREIGN KEY("followerId") REFERENCES "User"("id"), + PRIMARY KEY("id") +); + CREATE TABLE "Post" ( "id" INT NOT NULL, "description" VARCHAR(191) NOT NULL, @@ -26,12 +36,4 @@ CREATE TABLE "Post" ( PRIMARY KEY("id") ); -CREATE TABLE "Follow" ( - "id" INT NOT NULL, - "created_date" DATE NOT NULL, - "leaderId" INT UNIQUE NOT NULL, - FOREIGN KEY("leaderId") REFERENCES "User"("id"), - "followerId" INT UNIQUE NOT NULL, - FOREIGN KEY("followerId") REFERENCES "User"("id"), - PRIMARY KEY("id") -); + diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_71_postgresql/modules/entities/script.sql b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_71_postgresql/modules/entities/script.sql index 582c781af..8cedbb3e0 100644 --- a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_71_postgresql/modules/entities/script.sql +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_71_postgresql/modules/entities/script.sql @@ -4,8 +4,8 @@ -- Please verify the generated scripts and execute them against the target DB server. DROP TABLE IF EXISTS "Comment"; -DROP TABLE IF EXISTS "Follow"; DROP TABLE IF EXISTS "Post"; +DROP TABLE IF EXISTS "Follow"; DROP TABLE IF EXISTS "User"; CREATE TABLE "User" ( @@ -16,6 +16,16 @@ CREATE TABLE "User" ( PRIMARY KEY("id") ); +CREATE TABLE "Follow" ( + "id" INT NOT NULL, + "timestamp" TIMESTAMP NOT NULL, + "leaderId" INT NOT NULL, + FOREIGN KEY("leaderId") REFERENCES "User"("id"), + "followerId" INT NOT NULL, + FOREIGN KEY("followerId") REFERENCES "User"("id"), + PRIMARY KEY("id") +); + CREATE TABLE "Post" ( "id" INT NOT NULL, "description" VARCHAR(191) NOT NULL, @@ -27,16 +37,6 @@ CREATE TABLE "Post" ( PRIMARY KEY("id") ); -CREATE TABLE "Follow" ( - "id" INT NOT NULL, - "timestamp" TIMESTAMP NOT NULL, - "leaderId" INT NOT NULL, - FOREIGN KEY("leaderId") REFERENCES "User"("id"), - "followerId" INT NOT NULL, - FOREIGN KEY("followerId") REFERENCES "User"("id"), - PRIMARY KEY("id") -); - CREATE TABLE "Comment" ( "id" INT NOT NULL, "comment" VARCHAR(191) NOT NULL, @@ -47,3 +47,5 @@ CREATE TABLE "Comment" ( FOREIGN KEY("postId") REFERENCES "Post"("id"), PRIMARY KEY("id") ); + + diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_73/modules/entities/persist_db_config.bal b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_73/modules/entities/persist_db_config.bal index aedfe37e0..05bde0c27 100644 --- a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_73/modules/entities/persist_db_config.bal +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_73/modules/entities/persist_db_config.bal @@ -1,6 +1,8 @@ // AUTO-GENERATED FILE. DO NOT MODIFY. + // This file is an auto-generated file by Ballerina persistence layer. // It should not be modified by hand. + import ballerinax/mysql; configurable int port = ?; diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_73/modules/entities/script.sql b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_73/modules/entities/script.sql index abdb956e8..cc5d886e1 100644 --- a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_73/modules/entities/script.sql +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_73/modules/entities/script.sql @@ -4,16 +4,17 @@ -- Please verify the generated scripts and execute them against the target DB server. DROP TABLE IF EXISTS `cars`; -DROP TABLE IF EXISTS `User`; -DROP TABLE IF EXISTS `people2`; DROP TABLE IF EXISTS `Person`; +DROP TABLE IF EXISTS `people2`; +DROP TABLE IF EXISTS `User`; -CREATE TABLE `Person` ( +CREATE TABLE `User` ( + `id` INT NOT NULL, `name` VARCHAR(191) NOT NULL, - `age` INT NOT NULL, + `gender` ENUM('MALE', 'FEMALE') NOT NULL, `nic` VARCHAR(191) NOT NULL, - `salary` DECIMAL(65,30) NOT NULL, - PRIMARY KEY(`name`) + `salary` DECIMAL(65,30), + PRIMARY KEY(`id`) ); CREATE TABLE `people2` ( @@ -24,13 +25,12 @@ CREATE TABLE `people2` ( PRIMARY KEY(`name`) ); -CREATE TABLE `User` ( - `id` INT NOT NULL, +CREATE TABLE `Person` ( `name` VARCHAR(191) NOT NULL, - `gender` ENUM('MALE', 'FEMALE') NOT NULL, + `age` INT NOT NULL, `nic` VARCHAR(191) NOT NULL, - `salary` DECIMAL(65,30), - PRIMARY KEY(`id`) + `salary` DECIMAL(65,30) NOT NULL, + PRIMARY KEY(`name`) ); CREATE TABLE `cars` ( diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_73/modules/h2_entities/script.sql b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_73/modules/h2_entities/script.sql index c5401dca0..ae39319b5 100644 --- a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_73/modules/h2_entities/script.sql +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_73/modules/h2_entities/script.sql @@ -4,16 +4,17 @@ -- Please verify the generated scripts and execute them against the target DB server. DROP TABLE IF EXISTS "cars"; -DROP TABLE IF EXISTS "User"; -DROP TABLE IF EXISTS "people2"; DROP TABLE IF EXISTS "Person"; +DROP TABLE IF EXISTS "people2"; +DROP TABLE IF EXISTS "User"; -CREATE TABLE "Person" ( +CREATE TABLE "User" ( + "id" INT NOT NULL, "name" VARCHAR(191) NOT NULL, - "age" INT NOT NULL, + "gender" VARCHAR(6) CHECK ("gender" IN ('MALE', 'FEMALE')) NOT NULL, "nic" VARCHAR(191) NOT NULL, - "salary" DECIMAL(65,30) NOT NULL, - PRIMARY KEY("name") + "salary" DECIMAL(65,30), + PRIMARY KEY("id") ); CREATE TABLE "people2" ( @@ -24,13 +25,12 @@ CREATE TABLE "people2" ( PRIMARY KEY("name") ); -CREATE TABLE "User" ( - "id" INT NOT NULL, +CREATE TABLE "Person" ( "name" VARCHAR(191) NOT NULL, - "gender" VARCHAR(6) CHECK ("gender" IN ('MALE', 'FEMALE')) NOT NULL, + "age" INT NOT NULL, "nic" VARCHAR(191) NOT NULL, - "salary" DECIMAL(65,30), - PRIMARY KEY("id") + "salary" DECIMAL(65,30) NOT NULL, + PRIMARY KEY("name") ); CREATE TABLE "cars" ( diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_73/modules/mssql_entities/script.sql b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_73/modules/mssql_entities/script.sql index 1abc6a335..e9874770a 100644 --- a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_73/modules/mssql_entities/script.sql +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_73/modules/mssql_entities/script.sql @@ -4,16 +4,17 @@ -- Please verify the generated scripts and execute them against the target DB server. DROP TABLE IF EXISTS [cars]; -DROP TABLE IF EXISTS [User]; -DROP TABLE IF EXISTS [people2]; DROP TABLE IF EXISTS [Person]; +DROP TABLE IF EXISTS [people2]; +DROP TABLE IF EXISTS [User]; -CREATE TABLE [Person] ( +CREATE TABLE [User] ( + [id] INT NOT NULL, [name] VARCHAR(191) NOT NULL, - [age] INT NOT NULL, + [gender] VARCHAR(6) CHECK ([gender] IN ('MALE', 'FEMALE')) NOT NULL, [nic] VARCHAR(191) NOT NULL, - [salary] DECIMAL(38,30) NOT NULL, - PRIMARY KEY([name]) + [salary] DECIMAL(38,30), + PRIMARY KEY([id]) ); CREATE TABLE [people2] ( @@ -24,13 +25,12 @@ CREATE TABLE [people2] ( PRIMARY KEY([name]) ); -CREATE TABLE [User] ( - [id] INT NOT NULL, +CREATE TABLE [Person] ( [name] VARCHAR(191) NOT NULL, - [gender] VARCHAR(6) CHECK ([gender] IN ('MALE', 'FEMALE')) NOT NULL, + [age] INT NOT NULL, [nic] VARCHAR(191) NOT NULL, - [salary] DECIMAL(38,30), - PRIMARY KEY([id]) + [salary] DECIMAL(38,30) NOT NULL, + PRIMARY KEY([name]) ); CREATE TABLE [cars] ( diff --git a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_73/modules/postgresql_entities/script.sql b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_73/modules/postgresql_entities/script.sql index c5401dca0..ae39319b5 100644 --- a/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_73/modules/postgresql_entities/script.sql +++ b/persist-cli-tests/src/test/resources/test-src/output/tool_test_generate_73/modules/postgresql_entities/script.sql @@ -4,16 +4,17 @@ -- Please verify the generated scripts and execute them against the target DB server. DROP TABLE IF EXISTS "cars"; -DROP TABLE IF EXISTS "User"; -DROP TABLE IF EXISTS "people2"; DROP TABLE IF EXISTS "Person"; +DROP TABLE IF EXISTS "people2"; +DROP TABLE IF EXISTS "User"; -CREATE TABLE "Person" ( +CREATE TABLE "User" ( + "id" INT NOT NULL, "name" VARCHAR(191) NOT NULL, - "age" INT NOT NULL, + "gender" VARCHAR(6) CHECK ("gender" IN ('MALE', 'FEMALE')) NOT NULL, "nic" VARCHAR(191) NOT NULL, - "salary" DECIMAL(65,30) NOT NULL, - PRIMARY KEY("name") + "salary" DECIMAL(65,30), + PRIMARY KEY("id") ); CREATE TABLE "people2" ( @@ -24,13 +25,12 @@ CREATE TABLE "people2" ( PRIMARY KEY("name") ); -CREATE TABLE "User" ( - "id" INT NOT NULL, +CREATE TABLE "Person" ( "name" VARCHAR(191) NOT NULL, - "gender" VARCHAR(6) CHECK ("gender" IN ('MALE', 'FEMALE')) NOT NULL, + "age" INT NOT NULL, "nic" VARCHAR(191) NOT NULL, - "salary" DECIMAL(65,30), - PRIMARY KEY("id") + "salary" DECIMAL(65,30) NOT NULL, + PRIMARY KEY("name") ); CREATE TABLE "cars" ( diff --git a/persist-cli/src/main/java/io/ballerina/persist/nodegenerator/syntax/utils/SqlScriptUtils.java b/persist-cli/src/main/java/io/ballerina/persist/nodegenerator/syntax/utils/SqlScriptUtils.java index ef55d44ed..c66d665f0 100644 --- a/persist-cli/src/main/java/io/ballerina/persist/nodegenerator/syntax/utils/SqlScriptUtils.java +++ b/persist-cli/src/main/java/io/ballerina/persist/nodegenerator/syntax/utils/SqlScriptUtils.java @@ -34,10 +34,13 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; +import java.util.Collections; import java.util.HashMap; +import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.Queue; import java.util.Set; import static io.ballerina.persist.PersistToolsConstants.BallerinaTypes; @@ -232,6 +235,10 @@ private static String getRelationScripts(Entity entity, EntityField entityField, List keyColumns = relation.getKeyColumns(); List references = relation.getKeyColumns().stream().map(Relation.Key::getReferenceColumnName).toList(); Entity assocEntity = relation.getAssocEntity(); + // if the association entity has unsupported types, skip the relation + if (assocEntity.containsUnsupportedTypes()) { + return ""; + } EntityField assocEntityField = getMapOfRelationFields(assocEntity, false).get(entity.getEntityName()) .get(index); Relation.RelationType associatedEntityRelationType = assocEntityField.getRelation().getRelationType(); @@ -275,7 +282,8 @@ private static String getRelationScripts(Entity entity, EntityField entityField, relationScripts.append(MessageFormat.format("{0}{1}FOREIGN KEY({2}) REFERENCES {3}({4}),", NEW_LINE, TAB, foreignKey.toString(), getTableNameWithSchema(assocEntity, datasource), referenceFieldName)); - updateReferenceTable(removeSingleQuote(entity.getTableName()), assocEntity.getTableName(), referenceTables); + updateReferenceTable(removeSingleQuote(entity.getTableName()), removeSingleQuote(assocEntity.getTableName()), + referenceTables); return relationScripts.toString(); } @@ -553,36 +561,62 @@ private static String getEnumType(Enum enumValue, String fieldName, String datas private static String[] rearrangeScriptsWithReference(Set tables, HashMap> referenceTables, HashMap> tableScripts) { - List tableOrder = new ArrayList<>(); + // Step 1: Build the dependency graph + Map> graph = new HashMap<>(); + Map inDegree = new HashMap<>(); + + // Initialize graph and in-degree map + for (String table : tables) { + graph.put(table, new ArrayList<>()); + inDegree.put(table, 0); + } + // Populate the graph and in-degree map for (Map.Entry> entry : referenceTables.entrySet()) { - if (tableOrder.isEmpty()) { - tableOrder.add(removeSingleQuote(entry.getKey())); - } else { - int firstIndex = 0; - List referenceTableNames = referenceTables.get(entry.getKey()); - for (String referenceTableName : referenceTableNames) { - int index = tableOrder.indexOf(referenceTableName); - if ((firstIndex == 0 || index > firstIndex) && index >= 0) { - firstIndex = index + 1; - } - } - tableOrder.add(firstIndex, removeSingleQuote(entry.getKey())); + String table = entry.getKey(); + for (String referenceTable : entry.getValue()) { + graph.get(referenceTable).add(table); + inDegree.put(table, inDegree.get(table) + 1); } } - for (String tableName : tables) { - if (!tableOrder.contains(tableName)) { - tableOrder.add(0, tableName); + + // Step 2: Perform topological sorting using Kahn's Algorithm + Queue queue = new LinkedList<>(); + List sortedOrder = new ArrayList<>(); + + // Add nodes with in-degree 0 to the queue + for (Map.Entry entry : inDegree.entrySet()) { + if (entry.getValue() == 0) { + queue.add(entry.getKey()); } } + + // Process the graph + while (!queue.isEmpty()) { + String current = queue.poll(); + sortedOrder.add(current); + + for (String neighbor : graph.get(current)) { + inDegree.put(neighbor, inDegree.get(neighbor) - 1); + if (inDegree.get(neighbor) == 0) { + queue.add(neighbor); + } + } + } + + // Reverse the sorted order for reverse dependency processing + Collections.reverse(sortedOrder); + + // Step 3: Rearrange table scripts based on the sorted order int length = tables.size() * 2; - int size = tableOrder.size(); String[] tableScriptsInOrder = new String[length]; - for (int i = 0; i <= tableOrder.size() - 1; i++) { - List script = tableScripts.get(removeSingleQuote(tableOrder.get(size - (i + 1)))); - tableScriptsInOrder[i] = script.get(0); - tableScriptsInOrder[length - (i + 1)] = script.get(1); + for (int i = 0; i < sortedOrder.size(); i++) { + String tableName = sortedOrder.get(i); + List script = tableScripts.get(removeSingleQuote(tableName)); + tableScriptsInOrder[i] = script.get(0); // DROP TABLE script + tableScriptsInOrder[length - (i + 1)] = script.get(1); // CREATE TABLE script } + return tableScriptsInOrder; }