From 0ff484303757ef2948fe7516115e77afab50e7b8 Mon Sep 17 00:00:00 2001 From: SHM Date: Fri, 29 Aug 2025 09:52:19 +0900 Subject: [PATCH] =?UTF-8?q?[=EC=84=B1=ED=98=84=EB=AA=A8]=20CPXV2,=20Log=20?= =?UTF-8?q?DB=ED=94=84=EB=A1=9C=EC=A0=9D=ED=8A=B8,=20DB=20=EC=BB=A8?= =?UTF-8?q?=ED=85=8D=EC=8A=A4=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DBPatch/DBPatch_CPXV2Log_Create.bat | 21 + DBPatch/DBPatch_CPXV2_Create.bat | 19 + DBPatch/Tool_CPXV2Log_Scaffold.bat | 4 + DBPatch/Tool_CPXV2_Scaffold.bat | 4 + .../sqlScripts/SystemX.DB.CPXV2Log_Create.sql | 568 ++++++++++++ .../sqlScripts/SystemX.DB.CPXV2_Create.sql | 821 ++++++++++++++++++ .../sqlScripts/dacpac/SystemX.DB.CPXV2.dacpac | Bin 0 -> 5806 bytes .../dacpac/SystemX.DB.CPXV2Log.dacpac | Bin 0 -> 5134 bytes Projects/DLL/SystemX.Core.DB.dll | Bin 12288 -> 64512 bytes Projects/DLL/SystemX.Core.dll | Bin 50688 -> 50688 bytes .../SystemX.DB.CPXV2/SystemX.DB.CPXV2.sqlproj | 89 ++ .../dbo/Scripts/scriptAfterBuild.sql | 18 + .../dbo/SotredProcedures/spGetDBList.sql | 5 + .../dbo/Tables/HIST_TestListFile.sql | 28 + .../HIST_TestListFileLatestStepVersion.sql | 17 + .../Tables/HIST_TestListFileVariantList.sql | 18 + .../dbo/Tables/HIST_TesterSummary.sql | 43 + .../dbo/Tables/PROD_Group.sql | 17 + .../dbo/Tables/PROD_Release.sql | 30 + .../dbo/Tables/PROD_Variant.sql | 49 ++ .../SystemX.DB.CPXV2/dbo/Tables/STAT_Host.sql | 19 + .../dbo/Tables/STAT_TestCode.sql | 18 + .../SystemX.DB.CPXV2/dbo/Tables/STAT_User.sql | 24 + .../dbo/Tables/STOR_TestListFile.sql | 28 + .../dbo/Tables/VRFY_TestListFileRelease.sql | 48 + .../SystemX.DB.CPXV2Log.sqlproj | 82 ++ .../dbo/Functions/Scala/XConvertDateE.sql | 23 + .../dbo/Functions/Scala/XConvertDateK.sql | 25 + .../dbo/Scripts/scriptCreateTables.sql | 31 + .../StoredProcedures/spCreateTableByName.sql | 78 ++ .../StoredProcedures/spCreateTableMonth.sql | 37 + .../dbo/Tables/HIST_LogSummary.sql | 51 ++ .../dbo/Tables/HIST_TestResult.sql | 19 + .../SystemX.Core.DB/CPXV2/Context/CPXV2.cs | 275 ++++++ .../CPXV2/Tables/HIST_TestListFile.cs | 35 + .../HIST_TestListFileLatestStepVersion.cs | 15 + .../Tables/HIST_TestListFileVariantList.cs | 15 + .../CPXV2/Tables/HIST_TesterSummary.cs | 45 + .../CPXV2/Tables/PROD_Group.cs | 17 + .../CPXV2/Tables/PROD_Release.cs | 27 + .../CPXV2/Tables/PROD_Variant.cs | 37 + .../SystemX.Core.DB/CPXV2/Tables/STAT_Host.cs | 21 + .../CPXV2/Tables/STAT_TestCode.cs | 19 + .../SystemX.Core.DB/CPXV2/Tables/STAT_User.cs | 23 + .../CPXV2/Tables/STOR_TestListFile.cs | 43 + .../CPXV2/Tables/VRFY_TestListFileRelease.cs | 45 + .../CPXV2Log/Context/CPXV2Log.cs | 72 ++ .../CPXV2Log/Tables/HIST_LogSummary.cs | 45 + .../CPXV2Log/Tables/HIST_TestResult.cs | 13 + Projects/SystemX.Core/SystemX.Core.sln | 18 + 50 files changed, 2999 insertions(+) create mode 100644 DBPatch/DBPatch_CPXV2Log_Create.bat create mode 100644 DBPatch/DBPatch_CPXV2_Create.bat create mode 100644 DBPatch/Tool_CPXV2Log_Scaffold.bat create mode 100644 DBPatch/Tool_CPXV2_Scaffold.bat create mode 100644 DBPatch/sqlScripts/SystemX.DB.CPXV2Log_Create.sql create mode 100644 DBPatch/sqlScripts/SystemX.DB.CPXV2_Create.sql create mode 100644 DBPatch/sqlScripts/dacpac/SystemX.DB.CPXV2.dacpac create mode 100644 DBPatch/sqlScripts/dacpac/SystemX.DB.CPXV2Log.dacpac create mode 100644 Projects/SystemX.Core/DB/SystemX.DB.CPXV2/SystemX.DB.CPXV2.sqlproj create mode 100644 Projects/SystemX.Core/DB/SystemX.DB.CPXV2/dbo/Scripts/scriptAfterBuild.sql create mode 100644 Projects/SystemX.Core/DB/SystemX.DB.CPXV2/dbo/SotredProcedures/spGetDBList.sql create mode 100644 Projects/SystemX.Core/DB/SystemX.DB.CPXV2/dbo/Tables/HIST_TestListFile.sql create mode 100644 Projects/SystemX.Core/DB/SystemX.DB.CPXV2/dbo/Tables/HIST_TestListFileLatestStepVersion.sql create mode 100644 Projects/SystemX.Core/DB/SystemX.DB.CPXV2/dbo/Tables/HIST_TestListFileVariantList.sql create mode 100644 Projects/SystemX.Core/DB/SystemX.DB.CPXV2/dbo/Tables/HIST_TesterSummary.sql create mode 100644 Projects/SystemX.Core/DB/SystemX.DB.CPXV2/dbo/Tables/PROD_Group.sql create mode 100644 Projects/SystemX.Core/DB/SystemX.DB.CPXV2/dbo/Tables/PROD_Release.sql create mode 100644 Projects/SystemX.Core/DB/SystemX.DB.CPXV2/dbo/Tables/PROD_Variant.sql create mode 100644 Projects/SystemX.Core/DB/SystemX.DB.CPXV2/dbo/Tables/STAT_Host.sql create mode 100644 Projects/SystemX.Core/DB/SystemX.DB.CPXV2/dbo/Tables/STAT_TestCode.sql create mode 100644 Projects/SystemX.Core/DB/SystemX.DB.CPXV2/dbo/Tables/STAT_User.sql create mode 100644 Projects/SystemX.Core/DB/SystemX.DB.CPXV2/dbo/Tables/STOR_TestListFile.sql create mode 100644 Projects/SystemX.Core/DB/SystemX.DB.CPXV2/dbo/Tables/VRFY_TestListFileRelease.sql create mode 100644 Projects/SystemX.Core/DB/SystemX.DB.CPXV2Log/SystemX.DB.CPXV2Log.sqlproj create mode 100644 Projects/SystemX.Core/DB/SystemX.DB.CPXV2Log/dbo/Functions/Scala/XConvertDateE.sql create mode 100644 Projects/SystemX.Core/DB/SystemX.DB.CPXV2Log/dbo/Functions/Scala/XConvertDateK.sql create mode 100644 Projects/SystemX.Core/DB/SystemX.DB.CPXV2Log/dbo/Scripts/scriptCreateTables.sql create mode 100644 Projects/SystemX.Core/DB/SystemX.DB.CPXV2Log/dbo/StoredProcedures/spCreateTableByName.sql create mode 100644 Projects/SystemX.Core/DB/SystemX.DB.CPXV2Log/dbo/StoredProcedures/spCreateTableMonth.sql create mode 100644 Projects/SystemX.Core/DB/SystemX.DB.CPXV2Log/dbo/Tables/HIST_LogSummary.sql create mode 100644 Projects/SystemX.Core/DB/SystemX.DB.CPXV2Log/dbo/Tables/HIST_TestResult.sql create mode 100644 Projects/SystemX.Core/SystemX.Core.DB/CPXV2/Context/CPXV2.cs create mode 100644 Projects/SystemX.Core/SystemX.Core.DB/CPXV2/Tables/HIST_TestListFile.cs create mode 100644 Projects/SystemX.Core/SystemX.Core.DB/CPXV2/Tables/HIST_TestListFileLatestStepVersion.cs create mode 100644 Projects/SystemX.Core/SystemX.Core.DB/CPXV2/Tables/HIST_TestListFileVariantList.cs create mode 100644 Projects/SystemX.Core/SystemX.Core.DB/CPXV2/Tables/HIST_TesterSummary.cs create mode 100644 Projects/SystemX.Core/SystemX.Core.DB/CPXV2/Tables/PROD_Group.cs create mode 100644 Projects/SystemX.Core/SystemX.Core.DB/CPXV2/Tables/PROD_Release.cs create mode 100644 Projects/SystemX.Core/SystemX.Core.DB/CPXV2/Tables/PROD_Variant.cs create mode 100644 Projects/SystemX.Core/SystemX.Core.DB/CPXV2/Tables/STAT_Host.cs create mode 100644 Projects/SystemX.Core/SystemX.Core.DB/CPXV2/Tables/STAT_TestCode.cs create mode 100644 Projects/SystemX.Core/SystemX.Core.DB/CPXV2/Tables/STAT_User.cs create mode 100644 Projects/SystemX.Core/SystemX.Core.DB/CPXV2/Tables/STOR_TestListFile.cs create mode 100644 Projects/SystemX.Core/SystemX.Core.DB/CPXV2/Tables/VRFY_TestListFileRelease.cs create mode 100644 Projects/SystemX.Core/SystemX.Core.DB/CPXV2Log/Context/CPXV2Log.cs create mode 100644 Projects/SystemX.Core/SystemX.Core.DB/CPXV2Log/Tables/HIST_LogSummary.cs create mode 100644 Projects/SystemX.Core/SystemX.Core.DB/CPXV2Log/Tables/HIST_TestResult.cs diff --git a/DBPatch/DBPatch_CPXV2Log_Create.bat b/DBPatch/DBPatch_CPXV2Log_Create.bat new file mode 100644 index 0000000..bb12a2f --- /dev/null +++ b/DBPatch/DBPatch_CPXV2Log_Create.bat @@ -0,0 +1,21 @@ +@echo off +CD ./sqlScripts/ + +::log +IF NOT EXIST .\logs mkdir logs + +::DB 정의 스키마 +SET Schema=SystemX.DB.CPXV2Log + +::연결정보 +SET ServerIP=127.0.0.1 +SET ServerPort=1433 +SET UserID=SystemX +SET Passwd=X + +::Default DB +@echo off +::CALL _CreateDB.bat %Schema% %ServerIP% %ServerPort% %UserID% %Passwd% CPXV2LongTermLogJson_DEV +::CALL _CreateDB.bat %Schema% %ServerIP% %ServerPort% %UserID% %Passwd% CPXV2LongTermLogJson_3030 +::CALL _CreateDB.bat %Schema% %ServerIP% %ServerPort% %UserID% %Passwd% CPXV2LongTermLogJson_3031 +::CALL _CreateDB.bat %Schema% %ServerIP% %ServerPort% %UserID% %Passwd% CPXV2LongTermLogJson_3032 diff --git a/DBPatch/DBPatch_CPXV2_Create.bat b/DBPatch/DBPatch_CPXV2_Create.bat new file mode 100644 index 0000000..9591557 --- /dev/null +++ b/DBPatch/DBPatch_CPXV2_Create.bat @@ -0,0 +1,19 @@ +@echo off +CD ./sqlScripts/ + +::log +IF NOT EXIST .\logs mkdir logs + +::DB 정의 스키마 +SET Schema=SystemX.DB.CPXV2 + +::연결정보 +SET ServerIP=127.0.0.1 +SET ServerPort=1433 +SET UserID=SystemX +SET Passwd=X + +::Default DB +@echo off +::CALL _CreateDB.bat %Schema% %ServerIP% %ServerPort% %UserID% %Passwd% CPXV2 +::CALL _CreateDB.bat %Schema% %ServerIP% %ServerPort% %UserID% %Passwd% CPXV2_DEV \ No newline at end of file diff --git a/DBPatch/Tool_CPXV2Log_Scaffold.bat b/DBPatch/Tool_CPXV2Log_Scaffold.bat new file mode 100644 index 0000000..b491878 --- /dev/null +++ b/DBPatch/Tool_CPXV2Log_Scaffold.bat @@ -0,0 +1,4 @@ +::AccountDB +cd ../Projects/SystemX.Core/SystemX.Core.DB + +dotnet ef dbcontext scaffold "server=127.0.0.1; user id=SystemX; password=X; database=CPXV2LongTermLogJson_DEV; TrustServerCertificate=true;" Microsoft.EntityFrameworkCore.SqlServer --namespace SystemX.Core.DB --context CPXV2Log --context-dir CPXV2Log\Context --output-dir CPXV2Log\Tables -f --use-database-names --no-onconfiguring \ No newline at end of file diff --git a/DBPatch/Tool_CPXV2_Scaffold.bat b/DBPatch/Tool_CPXV2_Scaffold.bat new file mode 100644 index 0000000..7bf7394 --- /dev/null +++ b/DBPatch/Tool_CPXV2_Scaffold.bat @@ -0,0 +1,4 @@ +::AccountDB +cd ../Projects/SystemX.Core/SystemX.Core.DB + +dotnet ef dbcontext scaffold "server=127.0.0.1; user id=SystemX; password=X; database=CPXV2_DEV; TrustServerCertificate=true;" Microsoft.EntityFrameworkCore.SqlServer --namespace SystemX.Core.DB --context CPXV2 --context-dir CPXV2\Context --output-dir CPXV2\Tables -f --use-database-names --no-onconfiguring \ No newline at end of file diff --git a/DBPatch/sqlScripts/SystemX.DB.CPXV2Log_Create.sql b/DBPatch/sqlScripts/SystemX.DB.CPXV2Log_Create.sql new file mode 100644 index 0000000..b9d59b9 --- /dev/null +++ b/DBPatch/sqlScripts/SystemX.DB.CPXV2Log_Create.sql @@ -0,0 +1,568 @@ +/* +SystemX.DB.CPXV2Log의 배포 스크립트 + +이 코드는 도구를 사용하여 생성되었습니다. +파일 내용을 변경하면 잘못된 동작이 발생할 수 있으며, 코드를 다시 생성하면 +변경 내용이 손실됩니다. +*/ + +GO +SET ANSI_NULLS, ANSI_PADDING, ANSI_WARNINGS, ARITHABORT, CONCAT_NULL_YIELDS_NULL, QUOTED_IDENTIFIER ON; + +SET NUMERIC_ROUNDABORT OFF; + + +GO +/* +:setvar DatabaseName "SystemX.DB.CPXV2Log" +:setvar DefaultFilePrefix "SystemX.DB.CPXV2Log" +:setvar DefaultDataPath "" +:setvar DefaultLogPath "" +*/ + +GO +:on error exit +GO +/* +SQLCMD 모드가 지원되지 않으면 SQLCMD 모드를 검색하고 스크립트를 실행하지 않습니다. +SQLCMD 모드를 설정한 후에 이 스크립트를 다시 사용하려면 다음을 실행합니다. +SET NOEXEC OFF; +*/ +:setvar __IsSqlCmdEnabled "True" +GO +IF N'$(__IsSqlCmdEnabled)' NOT LIKE N'True' + BEGIN + PRINT N'이 스크립트를 실행하려면 SQLCMD 모드를 사용하도록 설정해야 합니다.'; + SET NOEXEC ON; + END + + +GO +USE [master]; + + +GO + +IF (DB_ID(N'$(DatabaseName)') IS NOT NULL) +BEGIN + ALTER DATABASE [$(DatabaseName)] + SET SINGLE_USER WITH ROLLBACK IMMEDIATE; + DROP DATABASE [$(DatabaseName)]; +END + +GO +PRINT N'$(DatabaseName) 데이터베이스를 만드는 중...' +GO +CREATE DATABASE [$(DatabaseName)] COLLATE Korean_Wansung_CI_AS +GO +USE [$(DatabaseName)]; + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET ANSI_NULLS ON, + ANSI_PADDING ON, + ANSI_WARNINGS ON, + ARITHABORT ON, + CONCAT_NULL_YIELDS_NULL ON, + NUMERIC_ROUNDABORT OFF, + QUOTED_IDENTIFIER ON, + ANSI_NULL_DEFAULT ON, + CURSOR_DEFAULT LOCAL, + RECOVERY FULL, + CURSOR_CLOSE_ON_COMMIT OFF, + AUTO_CREATE_STATISTICS ON, + AUTO_SHRINK OFF, + AUTO_UPDATE_STATISTICS ON, + RECURSIVE_TRIGGERS OFF + WITH ROLLBACK IMMEDIATE; + END + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET ALLOW_SNAPSHOT_ISOLATION OFF; + END + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET READ_COMMITTED_SNAPSHOT OFF + WITH ROLLBACK IMMEDIATE; + END + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET AUTO_UPDATE_STATISTICS_ASYNC OFF, + PAGE_VERIFY NONE, + DATE_CORRELATION_OPTIMIZATION OFF, + DISABLE_BROKER, + PARAMETERIZATION SIMPLE, + SUPPLEMENTAL_LOGGING OFF + WITH ROLLBACK IMMEDIATE; + END + + +GO +IF IS_SRVROLEMEMBER(N'sysadmin') = 1 + BEGIN + IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + EXECUTE sp_executesql N'ALTER DATABASE [$(DatabaseName)] + SET TRUSTWORTHY OFF, + DB_CHAINING OFF + WITH ROLLBACK IMMEDIATE'; + END + END +ELSE + BEGIN + PRINT N'데이터베이스 설정을 수정할 수 없습니다. 이러한 설정을 적용하려면 SysAdmin이어야 합니다.'; + END + + +GO +IF IS_SRVROLEMEMBER(N'sysadmin') = 1 + BEGIN + IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + EXECUTE sp_executesql N'ALTER DATABASE [$(DatabaseName)] + SET HONOR_BROKER_PRIORITY OFF + WITH ROLLBACK IMMEDIATE'; + END + END +ELSE + BEGIN + PRINT N'데이터베이스 설정을 수정할 수 없습니다. 이러한 설정을 적용하려면 SysAdmin이어야 합니다.'; + END + + +GO +ALTER DATABASE [$(DatabaseName)] + SET TARGET_RECOVERY_TIME = 0 SECONDS + WITH ROLLBACK IMMEDIATE; + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET FILESTREAM(NON_TRANSACTED_ACCESS = OFF), + CONTAINMENT = NONE + WITH ROLLBACK IMMEDIATE; + END + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET AUTO_CREATE_STATISTICS ON(INCREMENTAL = OFF), + MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT = OFF, + DELAYED_DURABILITY = DISABLED + WITH ROLLBACK IMMEDIATE; + END + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET QUERY_STORE (QUERY_CAPTURE_MODE = ALL, DATA_FLUSH_INTERVAL_SECONDS = 900, INTERVAL_LENGTH_MINUTES = 60, MAX_PLANS_PER_QUERY = 200, CLEANUP_POLICY = (STALE_QUERY_THRESHOLD_DAYS = 367), MAX_STORAGE_SIZE_MB = 100) + WITH ROLLBACK IMMEDIATE; + END + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET QUERY_STORE = OFF + WITH ROLLBACK IMMEDIATE; + END + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE SCOPED CONFIGURATION SET MAXDOP = 0; + ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET MAXDOP = PRIMARY; + ALTER DATABASE SCOPED CONFIGURATION SET LEGACY_CARDINALITY_ESTIMATION = OFF; + ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET LEGACY_CARDINALITY_ESTIMATION = PRIMARY; + ALTER DATABASE SCOPED CONFIGURATION SET PARAMETER_SNIFFING = ON; + ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET PARAMETER_SNIFFING = PRIMARY; + ALTER DATABASE SCOPED CONFIGURATION SET QUERY_OPTIMIZER_HOTFIXES = OFF; + ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET QUERY_OPTIMIZER_HOTFIXES = PRIMARY; + END + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET TEMPORAL_HISTORY_RETENTION ON + WITH ROLLBACK IMMEDIATE; + END + + +GO +IF fulltextserviceproperty(N'IsFulltextInstalled') = 1 + EXECUTE sp_fulltext_database 'enable'; + + +GO +PRINT N'테이블 [dbo].[HIST_TestResult]을(를) 만드는 중...'; + + +GO +CREATE TABLE [dbo].[HIST_TestResult] ( + [No] BIGINT NOT NULL, + [TestDT] DATETIME2 (7) NULL, + [LogData] NVARCHAR (MAX) NOT NULL, + CONSTRAINT [PK_HIST_TestResult] PRIMARY KEY CLUSTERED ([No] ASC) ON [PRIMARY] +) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]; + + +GO +PRINT N'인덱스 [dbo].[HIST_TestResult].[HIST_TestResult_2]을(를) 만드는 중...'; + + +GO +CREATE NONCLUSTERED INDEX [HIST_TestResult_2] + ON [dbo].[HIST_TestResult]([TestDT] ASC, [No] ASC) + ON [PRIMARY]; + + +GO +PRINT N'인덱스 [dbo].[HIST_TestResult].[HIST_TestResult_3]을(를) 만드는 중...'; + + +GO +CREATE NONCLUSTERED INDEX [HIST_TestResult_3] + ON [dbo].[HIST_TestResult]([TestDT] ASC) + ON [PRIMARY]; + + +GO +PRINT N'테이블 [dbo].[HIST_LogSummary]을(를) 만드는 중...'; + + +GO +CREATE TABLE [dbo].[HIST_LogSummary] ( + [No] BIGINT IDENTITY (0, 1) NOT NULL, + [StationName] NVARCHAR (128) NULL, + [TestType] NVARCHAR (8) NOT NULL, + [Version] NVARCHAR (4) NOT NULL, + [ProdCode] NVARCHAR (4) NOT NULL, + [TestListFileNo] INT NULL, + [TestListVariantNo] INT NULL, + [TestListCntID] NVARCHAR (256) NULL, + [StepVersion] INT NULL, + [HostID] NVARCHAR (64) NOT NULL, + [Section] NVARCHAR (64) NOT NULL, + [ProdNo_C] NVARCHAR (32) NOT NULL, + [ProdNo_P] NVARCHAR (32) NOT NULL, + [Testcode] NVARCHAR (16) NOT NULL, + [TestListFileName] NVARCHAR (256) NOT NULL, + [ProductID] NVARCHAR (64) NOT NULL, + [Result] NVARCHAR (16) NOT NULL, + [Duration] NVARCHAR (16) NOT NULL, + [TestDT] DATETIME2 (7) NOT NULL, + CONSTRAINT [PK_HIST_LogSummary] PRIMARY KEY CLUSTERED ([No] ASC), + UNIQUE NONCLUSTERED ([No] ASC) ON [PRIMARY] +) ON [PRIMARY]; + + +GO +PRINT N'인덱스 [dbo].[HIST_LogSummary].[HIST_LogSummary_2]을(를) 만드는 중...'; + + +GO +CREATE NONCLUSTERED INDEX [HIST_LogSummary_2] + ON [dbo].[HIST_LogSummary]([TestDT] ASC, [No] ASC) + ON [PRIMARY]; + + +GO +PRINT N'인덱스 [dbo].[HIST_LogSummary].[HIST_LogSummary_3]을(를) 만드는 중...'; + + +GO +CREATE NONCLUSTERED INDEX [HIST_LogSummary_3] + ON [dbo].[HIST_LogSummary]([TestDT] ASC) + ON [PRIMARY]; + + +GO +PRINT N'DEFAULT 제약 조건 <이름 없음>을(를) 만드는 중...'; + + +GO +ALTER TABLE [dbo].[HIST_TestResult] + ADD DEFAULT (getdate()) FOR [TestDT]; + + +GO +PRINT N'DEFAULT 제약 조건 <이름 없음>을(를) 만드는 중...'; + + +GO +ALTER TABLE [dbo].[HIST_LogSummary] + ADD DEFAULT ('-') FOR [StationName]; + + +GO +PRINT N'DEFAULT 제약 조건 <이름 없음>을(를) 만드는 중...'; + + +GO +ALTER TABLE [dbo].[HIST_LogSummary] + ADD DEFAULT ((-1)) FOR [TestListFileNo]; + + +GO +PRINT N'DEFAULT 제약 조건 <이름 없음>을(를) 만드는 중...'; + + +GO +ALTER TABLE [dbo].[HIST_LogSummary] + ADD DEFAULT ((-1)) FOR [TestListVariantNo]; + + +GO +PRINT N'DEFAULT 제약 조건 <이름 없음>을(를) 만드는 중...'; + + +GO +ALTER TABLE [dbo].[HIST_LogSummary] + ADD DEFAULT ((-1)) FOR [StepVersion]; + + +GO +PRINT N'DEFAULT 제약 조건 <이름 없음>을(를) 만드는 중...'; + + +GO +ALTER TABLE [dbo].[HIST_LogSummary] + ADD DEFAULT (getdate()) FOR [TestDT]; + + +GO +PRINT N'프로시저 [dbo].[spCreateTableMonth]을(를) 만드는 중...'; + + +GO +CREATE PROCEDURE [dbo].[spCreateTableMonth] + +AS + --현재 월 HIST_TestResult 테이블 생성 + DECLARE @current_yymm varchar(4) = CONVERT(CHAR(4), GETDATE(), 12) + + DECLARE @current_summaryTableName varchar(40) = N'HIST_LogSummary_'+@current_yymm + DECLARE @current_summary_query varchar(200) = N' SELECT * INTO ' + @current_summaryTableName + N' FROM HIST_LogSummary' + IF NOT EXISTS(SELECT * FROM sys.tables WHERE NAME = @current_summaryTableName) + BEGIN + EXEC(@current_summary_query) + END + + DECLARE @current_resultTableName varchar(40) = N'HIST_TestResult_'+@current_yymm + DECLARE @current_result_query varchar(200) = N' SELECT * INTO ' + @current_resultTableName + N' FROM HIST_TestResult' + IF NOT EXISTS(SELECT * FROM sys.tables WHERE NAME = @current_resultTableName) + BEGIN + EXEC(@current_result_query) + END + + --다음 월 HIST_TestResult 테이블 생성 + DECLARE @next_yymm varchar(4) = CONVERT(CHAR(4), DATEADD(MONTH, 1, GETDATE()), 12) + + DECLARE @next_summaryTableName varchar(40) = N'HIST_LogSummary_'+@next_yymm + DECLARE @next_summary_query varchar(200) = N' SELECT * INTO ' + @next_summaryTableName + N' FROM HIST_LogSummary' + IF NOT EXISTS(SELECT * FROM sys.tables WHERE NAME = @next_summaryTableName) + BEGIN + EXEC(@next_summary_query) + END + + DECLARE @next_resultTableName varchar(40) = N'HIST_TestResult_'+@next_yymm + DECLARE @next_result_query varchar(200) = N' SELECT * INTO ' + @next_resultTableName + N' FROM HIST_TestResult' + IF NOT EXISTS(SELECT * FROM sys.tables WHERE NAME = @next_resultTableName) + BEGIN + EXEC(@next_result_query) + END +RETURN 0 +GO +PRINT N'프로시저 [dbo].[spCreateTableByName]을(를) 만드는 중...'; + + +GO +CREATE PROCEDURE [dbo].[spCreateTableByName] + @logSummaryTableName nvarchar(200), + @logResultTableName nvarchar(200) +AS + IF NOT EXISTS(SELECT * FROM sys.tables WHERE NAME = @logSummaryTableName) + BEGIN + DECLARE @summaryQuery nvarchar(4000)= N' + CREATE TABLE [dbo].['+@logSummaryTableName+']( + [No] [bigint] IDENTITY(0,1) NOT NULL, + [StationName] [nvarchar](128) NULL, + [TestType] [nvarchar](8) NOT NULL, + [Version] [nvarchar](4) NOT NULL, + [ProdCode] [nvarchar](4) NOT NULL, + [TestListFileNo] [int] NULL, + [TestListVariantNo] [int] NULL, + [TestListCntID] [nvarchar](256) NULL, + [StepVersion] [int] NULL, + [HostID] [nvarchar](64) NOT NULL, + [Section] [nvarchar](64) NOT NULL, + [ProdNo_C] [nvarchar](32) NOT NULL, + [ProdNo_P] [nvarchar](32) NOT NULL, + [Testcode] [nvarchar](16) NOT NULL, + [TestListFileName] [nvarchar](256) NOT NULL, + [ProductID] [nvarchar](64) NOT NULL, + [Result] [nvarchar](16) NOT NULL, + [Duration] [nvarchar](16) NOT NULL, + [TestDT] [datetime2](7) NOT NULL, + CONSTRAINT [PK_'+@logSummaryTableName+'] PRIMARY KEY CLUSTERED + ( + [No] ASC + )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY], + UNIQUE NONCLUSTERED + ( + [No] ASC + )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY] + ) ON [PRIMARY] + + ALTER TABLE [dbo].['+@logSummaryTableName+'] ADD DEFAULT (''-'') FOR [StationName] + + ALTER TABLE [dbo].['+@logSummaryTableName+'] ADD DEFAULT ((-1)) FOR [TestListFileNo] + + ALTER TABLE [dbo].['+@logSummaryTableName+'] ADD DEFAULT ((-1)) FOR [TestListVariantNo] + + ALTER TABLE [dbo].['+@logSummaryTableName+'] ADD DEFAULT ((-1)) FOR [StepVersion] + + ALTER TABLE [dbo].['+@logSummaryTableName+'] ADD DEFAULT (getdate()) FOR [TestDT] + + CREATE INDEX ['+@logSummaryTableName+'_2] ON '+@logSummaryTableName+' (TestDT, No); + + CREATE INDEX ['+@logSummaryTableName+'_3] ON '+@logSummaryTableName+' (TestDT); + '; + + EXEC(@summaryQuery) + END + + + IF NOT EXISTS(SELECT * FROM sys.tables WHERE NAME = @logResultTableName) + BEGIN + DECLARE @resultQuery nvarchar(4000)= N' + CREATE TABLE [dbo].['+@logResultTableName+']( + [No] [bigint] NOT NULL, + [TestDT] [datetime2](7) NULL, + [LogData] [nvarchar](max) NOT NULL, + CONSTRAINT [PK_'+@logResultTableName+'] PRIMARY KEY CLUSTERED + ( + [No] ASC + )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY] + ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] + + ALTER TABLE [dbo].['+@logResultTableName+'] ADD DEFAULT (getdate()) FOR [TestDT] + + CREATE INDEX ['+@logResultTableName+'_2] ON '+@logResultTableName+' (TestDT, No); + + CREATE INDEX ['+@logResultTableName+'_3] ON '+@logResultTableName+' (TestDT); + '; + EXEC(@resultQuery) + END +RETURN 0 +GO +/* +배포 후 스크립트 템플릿 +-------------------------------------------------------------------------------------- + 이 파일에는 빌드 스크립트에 추가될 SQL 문이 있습니다. + SQLCMD 구문을 사용하여 파일을 배포 후 스크립트에 포함합니다. + 예: :r .\myfile.sql + SQLCMD 구문을 사용하여 배포 후 스크립트의 변수를 참조합니다. + 예: :setvar TableName MyTable + SELECT * FROM [$(TableName)] +-------------------------------------------------------------------------------------- +*/ + +/*10회 루프*/ +DECLARE @CNT INT = 0; +DECLARE @MAX_CNT INT = 10 +DECLARE @DBNAME varchar(50) = DB_NAME(); + +IF (@DBNAME LIKE '%short%') +BEGIN + WHILE(@CNT < @MAX_CNT) + BEGIN + + DECLARE @yyyy varchar(4) = CONVERT(CHAR(4), DATEADD(YEAR, @CNT, GETDATE()), 23) + DECLARE @summary varchar(200) = N'HIST_LogSummary_'+@yyyy + DECLARE @result varchar(200) = N'HIST_TestResult_'+@yyyy + EXEC [dbo].[spCreateTableByName] @summary , @result + + SET @CNT += 1 + END +END +GO + +GO +DECLARE @VarDecimalSupported AS BIT; + +SELECT @VarDecimalSupported = 0; + +IF ((ServerProperty(N'EngineEdition') = 3) + AND (((@@microsoftversion / power(2, 24) = 9) + AND (@@microsoftversion & 0xffff >= 3024)) + OR ((@@microsoftversion / power(2, 24) = 10) + AND (@@microsoftversion & 0xffff >= 1600)))) + SELECT @VarDecimalSupported = 1; + +IF (@VarDecimalSupported > 0) + BEGIN + EXECUTE sp_db_vardecimal_storage_format N'$(DatabaseName)', 'ON'; + END + + +GO +ALTER DATABASE [$(DatabaseName)] + SET MULTI_USER + WITH ROLLBACK IMMEDIATE; + + +GO +PRINT N'업데이트가 완료되었습니다.'; + + +GO diff --git a/DBPatch/sqlScripts/SystemX.DB.CPXV2_Create.sql b/DBPatch/sqlScripts/SystemX.DB.CPXV2_Create.sql new file mode 100644 index 0000000..6a33b6f --- /dev/null +++ b/DBPatch/sqlScripts/SystemX.DB.CPXV2_Create.sql @@ -0,0 +1,821 @@ +/* +SystemX.DB.CPXV2의 배포 스크립트 + +이 코드는 도구를 사용하여 생성되었습니다. +파일 내용을 변경하면 잘못된 동작이 발생할 수 있으며, 코드를 다시 생성하면 +변경 내용이 손실됩니다. +*/ + +GO +SET ANSI_NULLS, ANSI_PADDING, ANSI_WARNINGS, ARITHABORT, CONCAT_NULL_YIELDS_NULL, QUOTED_IDENTIFIER ON; + +SET NUMERIC_ROUNDABORT OFF; + + +GO +/* +:setvar DatabaseName "SystemX.DB.CPXV2" +:setvar DefaultFilePrefix "SystemX.DB.CPXV2" +:setvar DefaultDataPath "" +:setvar DefaultLogPath "" +*/ + +GO +:on error exit +GO +/* +SQLCMD 모드가 지원되지 않으면 SQLCMD 모드를 검색하고 스크립트를 실행하지 않습니다. +SQLCMD 모드를 설정한 후에 이 스크립트를 다시 사용하려면 다음을 실행합니다. +SET NOEXEC OFF; +*/ +:setvar __IsSqlCmdEnabled "True" +GO +IF N'$(__IsSqlCmdEnabled)' NOT LIKE N'True' + BEGIN + PRINT N'이 스크립트를 실행하려면 SQLCMD 모드를 사용하도록 설정해야 합니다.'; + SET NOEXEC ON; + END + + +GO +USE [master]; + + +GO + +IF (DB_ID(N'$(DatabaseName)') IS NOT NULL) +BEGIN + ALTER DATABASE [$(DatabaseName)] + SET SINGLE_USER WITH ROLLBACK IMMEDIATE; + DROP DATABASE [$(DatabaseName)]; +END + +GO +PRINT N'$(DatabaseName) 데이터베이스를 만드는 중...' +GO +CREATE DATABASE [$(DatabaseName)] COLLATE Korean_Wansung_CI_AS +GO +USE [$(DatabaseName)]; + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET ANSI_NULLS ON, + ANSI_PADDING ON, + ANSI_WARNINGS ON, + ARITHABORT ON, + CONCAT_NULL_YIELDS_NULL ON, + NUMERIC_ROUNDABORT OFF, + QUOTED_IDENTIFIER ON, + ANSI_NULL_DEFAULT ON, + CURSOR_DEFAULT LOCAL, + RECOVERY FULL, + CURSOR_CLOSE_ON_COMMIT OFF, + AUTO_CREATE_STATISTICS ON, + AUTO_SHRINK OFF, + AUTO_UPDATE_STATISTICS ON, + RECURSIVE_TRIGGERS OFF + WITH ROLLBACK IMMEDIATE; + END + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET ALLOW_SNAPSHOT_ISOLATION OFF; + END + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET READ_COMMITTED_SNAPSHOT OFF + WITH ROLLBACK IMMEDIATE; + END + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET AUTO_UPDATE_STATISTICS_ASYNC OFF, + PAGE_VERIFY NONE, + DATE_CORRELATION_OPTIMIZATION OFF, + DISABLE_BROKER, + PARAMETERIZATION SIMPLE, + SUPPLEMENTAL_LOGGING OFF + WITH ROLLBACK IMMEDIATE; + END + + +GO +IF IS_SRVROLEMEMBER(N'sysadmin') = 1 + BEGIN + IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + EXECUTE sp_executesql N'ALTER DATABASE [$(DatabaseName)] + SET TRUSTWORTHY OFF, + DB_CHAINING OFF + WITH ROLLBACK IMMEDIATE'; + END + END +ELSE + BEGIN + PRINT N'데이터베이스 설정을 수정할 수 없습니다. 이러한 설정을 적용하려면 SysAdmin이어야 합니다.'; + END + + +GO +IF IS_SRVROLEMEMBER(N'sysadmin') = 1 + BEGIN + IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + EXECUTE sp_executesql N'ALTER DATABASE [$(DatabaseName)] + SET HONOR_BROKER_PRIORITY OFF + WITH ROLLBACK IMMEDIATE'; + END + END +ELSE + BEGIN + PRINT N'데이터베이스 설정을 수정할 수 없습니다. 이러한 설정을 적용하려면 SysAdmin이어야 합니다.'; + END + + +GO +ALTER DATABASE [$(DatabaseName)] + SET TARGET_RECOVERY_TIME = 0 SECONDS + WITH ROLLBACK IMMEDIATE; + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET FILESTREAM(NON_TRANSACTED_ACCESS = OFF), + CONTAINMENT = NONE + WITH ROLLBACK IMMEDIATE; + END + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET AUTO_CREATE_STATISTICS ON(INCREMENTAL = OFF), + MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT = OFF, + DELAYED_DURABILITY = DISABLED + WITH ROLLBACK IMMEDIATE; + END + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET QUERY_STORE (QUERY_CAPTURE_MODE = ALL, DATA_FLUSH_INTERVAL_SECONDS = 900, INTERVAL_LENGTH_MINUTES = 60, MAX_PLANS_PER_QUERY = 200, CLEANUP_POLICY = (STALE_QUERY_THRESHOLD_DAYS = 367), MAX_STORAGE_SIZE_MB = 100) + WITH ROLLBACK IMMEDIATE; + END + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET QUERY_STORE = OFF + WITH ROLLBACK IMMEDIATE; + END + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE SCOPED CONFIGURATION SET MAXDOP = 0; + ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET MAXDOP = PRIMARY; + ALTER DATABASE SCOPED CONFIGURATION SET LEGACY_CARDINALITY_ESTIMATION = OFF; + ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET LEGACY_CARDINALITY_ESTIMATION = PRIMARY; + ALTER DATABASE SCOPED CONFIGURATION SET PARAMETER_SNIFFING = ON; + ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET PARAMETER_SNIFFING = PRIMARY; + ALTER DATABASE SCOPED CONFIGURATION SET QUERY_OPTIMIZER_HOTFIXES = OFF; + ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET QUERY_OPTIMIZER_HOTFIXES = PRIMARY; + END + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET TEMPORAL_HISTORY_RETENTION ON + WITH ROLLBACK IMMEDIATE; + END + + +GO +IF fulltextserviceproperty(N'IsFulltextInstalled') = 1 + EXECUTE sp_fulltext_database 'enable'; + + +GO +PRINT N'테이블 [dbo].[VRFY_TestListFileRelease]을(를) 만드는 중...'; + + +GO +CREATE TABLE [dbo].[VRFY_TestListFileRelease] ( + [No] BIGINT IDENTITY (0, 1) NOT NULL, + [TestListFileNo] INT NULL, + [StepID] BIGINT NOT NULL, + [Variant] NVARCHAR (32) NOT NULL, + [Gate] NVARCHAR (128) NOT NULL, + [Activate] BIT NULL, + [StepVersion] INT NOT NULL, + [Enable] BIT NULL, + [Position] BIGINT NULL, + [StepDesc] NVARCHAR (2048) NULL, + [UseFunction] NVARCHAR (2048) NOT NULL, + [MacroParm] NVARCHAR (2048) NULL, + [Parm] NVARCHAR (2048) NULL, + [SpecMin] NVARCHAR (2048) NOT NULL, + [SpecMax] NVARCHAR (2048) NOT NULL, + [IsGlobal] BIT NULL, + [Dim] NVARCHAR (64) NOT NULL, + [UpdateDT] DATETIME2 (7) NOT NULL, + PRIMARY KEY CLUSTERED ([No] ASC) ON [PRIMARY] +) ON [PRIMARY]; + + +GO +PRINT N'인덱스 [dbo].[VRFY_TestListFileRelease].[CSK_VRFY_Release_2]을(를) 만드는 중...'; + + +GO +CREATE NONCLUSTERED INDEX [CSK_VRFY_Release_2] + ON [dbo].[VRFY_TestListFileRelease]([TestListFileNo] ASC, [StepID] ASC, [Enable] ASC, [No] ASC) + ON [PRIMARY]; + + +GO +PRINT N'테이블 [dbo].[STOR_TestListFile]을(를) 만드는 중...'; + + +GO +CREATE TABLE [dbo].[STOR_TestListFile] ( + [No] INT IDENTITY (0, 1) NOT NULL, + [Name] NVARCHAR (64) NOT NULL, + [TestType] NVARCHAR (8) NOT NULL, + [Version] NVARCHAR (4) NOT NULL, + [ProdCode] NVARCHAR (4) NOT NULL, + [FileName] NVARCHAR (64) NOT NULL, + [RegDT] DATETIME2 (7) NOT NULL, + [RegUser] NVARCHAR (32) NOT NULL, + [UpdateDT] DATETIME2 (7) NOT NULL, + [UpdateUser] NVARCHAR (32) NOT NULL, + [Comment] NVARCHAR (256) NULL, + [Description] NVARCHAR (256) NULL, + [TestListData] VARBINARY (MAX) NOT NULL, + PRIMARY KEY CLUSTERED ([No] ASC) ON [PRIMARY] +) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]; + + +GO +PRINT N'테이블 [dbo].[STAT_User]을(를) 만드는 중...'; + + +GO +CREATE TABLE [dbo].[STAT_User] ( + [No] INT IDENTITY (0, 1) NOT NULL, + [UserID] NVARCHAR (32) NOT NULL, + [Name] NVARCHAR (32) NOT NULL, + [Password] NVARCHAR (32) NOT NULL, + [Dept] NVARCHAR (64) NOT NULL, + [Email] NVARCHAR (64) NOT NULL, + [Comment] NVARCHAR (256) NULL, + [UpdateDT] DATETIME2 (7) NOT NULL, + PRIMARY KEY CLUSTERED ([No] ASC) ON [PRIMARY], + UNIQUE NONCLUSTERED ([UserID] ASC) ON [PRIMARY] +) ON [PRIMARY]; + + +GO +PRINT N'테이블 [dbo].[STAT_TestCode]을(를) 만드는 중...'; + + +GO +CREATE TABLE [dbo].[STAT_TestCode] ( + [No] INT IDENTITY (0, 1) NOT NULL, + [TestCode] NVARCHAR (16) NOT NULL, + [Gate1] NVARCHAR (64) NOT NULL, + [Gate2] NVARCHAR (64) NOT NULL, + [Comment] NVARCHAR (256) NULL, + PRIMARY KEY CLUSTERED ([No] ASC) ON [PRIMARY], + UNIQUE NONCLUSTERED ([TestCode] ASC) ON [PRIMARY] +) ON [PRIMARY]; + + +GO +PRINT N'테이블 [dbo].[STAT_Host]을(를) 만드는 중...'; + + +GO +CREATE TABLE [dbo].[STAT_Host] ( + [No] INT IDENTITY (0, 1) NOT NULL, + [HostID] NVARCHAR (64) NOT NULL, + [Section] NVARCHAR (64) NOT NULL, + [IP] NVARCHAR (15) NOT NULL, + [TestCode] NVARCHAR (16) NULL, + [Comment] NVARCHAR (256) NULL, + [UpdateDT] DATETIME2 (7) NOT NULL, + PRIMARY KEY CLUSTERED ([No] ASC) ON [PRIMARY] +) ON [PRIMARY]; + + +GO +PRINT N'테이블 [dbo].[PROD_Variant]을(를) 만드는 중...'; + + +GO +CREATE TABLE [dbo].[PROD_Variant] ( + [No] INT IDENTITY (0, 1) NOT NULL, + [ProdNo_P] NVARCHAR (32) NOT NULL, + [RegDT] DATETIME2 (7) NOT NULL, + [RegUser] NVARCHAR (32) NOT NULL, + [UpdateDT] DATETIME2 (7) NOT NULL, + [UpdateUser] NVARCHAR (32) NOT NULL, + [GroupNo] INT NULL, + [Comment] NVARCHAR (256) NULL, + [Description] NVARCHAR (256) NULL, + [TestListFileNo] INT NULL, + [UseTLPosition] INT NOT NULL, + [IsUse] BIT NOT NULL, + PRIMARY KEY CLUSTERED ([No] ASC) ON [PRIMARY] +) ON [PRIMARY]; + + +GO +PRINT N'테이블 [dbo].[PROD_Release]을(를) 만드는 중...'; + + +GO +CREATE TABLE [dbo].[PROD_Release] ( + [No] INT IDENTITY (0, 1) NOT NULL, + [ProdNo_C] NVARCHAR (32) NOT NULL, + [TestCodeNo] INT NULL, + [VariantNo] INT NULL, + [Config] NVARCHAR (32) NOT NULL, + [RegDT] DATETIME2 (7) NOT NULL, + [RegUser] NVARCHAR (32) NOT NULL, + [RegUserComment] NVARCHAR (256) NULL, + PRIMARY KEY CLUSTERED ([No] ASC) ON [PRIMARY] +) ON [PRIMARY]; + + +GO +PRINT N'테이블 [dbo].[PROD_Group]을(를) 만드는 중...'; + + +GO +CREATE TABLE [dbo].[PROD_Group] ( + [No] INT IDENTITY (0, 1) NOT NULL, + [GroupName] NVARCHAR (128) NOT NULL, + [ModelName] NVARCHAR (128) NOT NULL, + [Comment] NVARCHAR (256) NULL, + PRIMARY KEY CLUSTERED ([No] ASC) ON [PRIMARY], + UNIQUE NONCLUSTERED ([ModelName] ASC) ON [PRIMARY] +) ON [PRIMARY]; + + +GO +PRINT N'테이블 [dbo].[HIST_TestListFileVariantList]을(를) 만드는 중...'; + + +GO +CREATE TABLE [dbo].[HIST_TestListFileVariantList] ( + [No] BIGINT IDENTITY (0, 1) NOT NULL, + [TestListFileNo] INT NULL, + [VariantList] NVARCHAR (2048) NULL, + PRIMARY KEY CLUSTERED ([No] ASC) ON [PRIMARY] +) ON [PRIMARY]; + + +GO +PRINT N'인덱스 [dbo].[HIST_TestListFileVariantList].[CSK_HIST_TestListFileVariantList_2]을(를) 만드는 중...'; + + +GO +CREATE NONCLUSTERED INDEX [CSK_HIST_TestListFileVariantList_2] + ON [dbo].[HIST_TestListFileVariantList]([TestListFileNo] ASC, [No] ASC) + ON [PRIMARY]; + + +GO +PRINT N'테이블 [dbo].[HIST_TestListFileLatestStepVersion]을(를) 만드는 중...'; + + +GO +CREATE TABLE [dbo].[HIST_TestListFileLatestStepVersion] ( + [No] BIGINT IDENTITY (0, 1) NOT NULL, + [TestListFileNo] INT NULL, + [LatestStepVersion] INT NOT NULL, + PRIMARY KEY CLUSTERED ([No] ASC) ON [PRIMARY] +) ON [PRIMARY]; + + +GO +PRINT N'테이블 [dbo].[HIST_TestListFile]을(를) 만드는 중...'; + + +GO +CREATE TABLE [dbo].[HIST_TestListFile] ( + [No] BIGINT IDENTITY (0, 1) NOT NULL, + [TestListFileNo] INT NULL, + [Name] NVARCHAR (64) NOT NULL, + [TestListData1] VARBINARY (MAX) NULL, + [TestListData2] VARBINARY (MAX) NULL, + [TestListData3] VARBINARY (MAX) NULL, + [TestListData4] VARBINARY (MAX) NULL, + [TestListData5] VARBINARY (MAX) NULL, + [TestListData6] VARBINARY (MAX) NULL, + [TestListData7] VARBINARY (MAX) NULL, + [TestListData8] VARBINARY (MAX) NULL, + [TestListData9] VARBINARY (MAX) NULL, + [TestListData10] VARBINARY (MAX) NULL, + PRIMARY KEY CLUSTERED ([No] ASC) ON [PRIMARY] +) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]; + + +GO +PRINT N'인덱스 [dbo].[HIST_TestListFile].[CSK_HIST_TestList_2]을(를) 만드는 중...'; + + +GO +CREATE NONCLUSTERED INDEX [CSK_HIST_TestList_2] + ON [dbo].[HIST_TestListFile]([TestListFileNo] ASC, [Name] ASC, [No] ASC) + ON [PRIMARY]; + + +GO +PRINT N'테이블 [dbo].[HIST_TesterSummary]을(를) 만드는 중...'; + + +GO +CREATE TABLE [dbo].[HIST_TesterSummary] ( + [No] BIGINT IDENTITY (0, 1) NOT NULL, + [StationName] NVARCHAR (128) NULL, + [TestType] NVARCHAR (8) NOT NULL, + [Version] NVARCHAR (4) NOT NULL, + [ProdCode] NVARCHAR (4) NOT NULL, + [TestListFileNo] INT NULL, + [TestListVariantNo] INT NULL, + [TestListCntID] NVARCHAR (256) NULL, + [StepVersion] INT NULL, + [HostID] NVARCHAR (64) NOT NULL, + [Section] NVARCHAR (64) NOT NULL, + [ProdNo_C] NVARCHAR (32) NOT NULL, + [ProdNo_P] NVARCHAR (32) NOT NULL, + [Testcode] NVARCHAR (16) NOT NULL, + [TestListFileName] NVARCHAR (256) NOT NULL, + [ProductID] NVARCHAR (64) NOT NULL, + [Result] NVARCHAR (16) NOT NULL, + [Duration] NVARCHAR (16) NOT NULL, + [TestDT] DATETIME2 (7) NOT NULL, + UNIQUE NONCLUSTERED ([No] ASC) ON [PRIMARY] +) ON [PRIMARY]; + + +GO +PRINT N'DEFAULT 제약 조건 <이름 없음>을(를) 만드는 중...'; + + +GO +ALTER TABLE [dbo].[VRFY_TestListFileRelease] + ADD DEFAULT ((1)) FOR [Activate]; + + +GO +PRINT N'DEFAULT 제약 조건 <이름 없음>을(를) 만드는 중...'; + + +GO +ALTER TABLE [dbo].[VRFY_TestListFileRelease] + ADD DEFAULT ((1)) FOR [Enable]; + + +GO +PRINT N'DEFAULT 제약 조건 <이름 없음>을(를) 만드는 중...'; + + +GO +ALTER TABLE [dbo].[VRFY_TestListFileRelease] + ADD DEFAULT ('') FOR [StepDesc]; + + +GO +PRINT N'DEFAULT 제약 조건 <이름 없음>을(를) 만드는 중...'; + + +GO +ALTER TABLE [dbo].[VRFY_TestListFileRelease] + ADD DEFAULT ((0)) FOR [IsGlobal]; + + +GO +PRINT N'DEFAULT 제약 조건 <이름 없음>을(를) 만드는 중...'; + + +GO +ALTER TABLE [dbo].[VRFY_TestListFileRelease] + ADD DEFAULT (getdate()) FOR [UpdateDT]; + + +GO +PRINT N'DEFAULT 제약 조건 <이름 없음>을(를) 만드는 중...'; + + +GO +ALTER TABLE [dbo].[STOR_TestListFile] + ADD DEFAULT (getdate()) FOR [RegDT]; + + +GO +PRINT N'DEFAULT 제약 조건 <이름 없음>을(를) 만드는 중...'; + + +GO +ALTER TABLE [dbo].[STOR_TestListFile] + ADD DEFAULT (getdate()) FOR [UpdateDT]; + + +GO +PRINT N'DEFAULT 제약 조건 <이름 없음>을(를) 만드는 중...'; + + +GO +ALTER TABLE [dbo].[STAT_User] + ADD DEFAULT (getdate()) FOR [UpdateDT]; + + +GO +PRINT N'DEFAULT 제약 조건 <이름 없음>을(를) 만드는 중...'; + + +GO +ALTER TABLE [dbo].[STAT_Host] + ADD DEFAULT (getdate()) FOR [UpdateDT]; + + +GO +PRINT N'DEFAULT 제약 조건 <이름 없음>을(를) 만드는 중...'; + + +GO +ALTER TABLE [dbo].[PROD_Variant] + ADD DEFAULT (getdate()) FOR [RegDT]; + + +GO +PRINT N'DEFAULT 제약 조건 <이름 없음>을(를) 만드는 중...'; + + +GO +ALTER TABLE [dbo].[PROD_Variant] + ADD DEFAULT (getdate()) FOR [UpdateDT]; + + +GO +PRINT N'DEFAULT 제약 조건 <이름 없음>을(를) 만드는 중...'; + + +GO +ALTER TABLE [dbo].[PROD_Variant] + ADD DEFAULT ((0)) FOR [UseTLPosition]; + + +GO +PRINT N'DEFAULT 제약 조건 <이름 없음>을(를) 만드는 중...'; + + +GO +ALTER TABLE [dbo].[PROD_Variant] + ADD DEFAULT ((1)) FOR [IsUse]; + + +GO +PRINT N'DEFAULT 제약 조건 <이름 없음>을(를) 만드는 중...'; + + +GO +ALTER TABLE [dbo].[PROD_Release] + ADD DEFAULT (getdate()) FOR [RegDT]; + + +GO +PRINT N'DEFAULT 제약 조건 <이름 없음>을(를) 만드는 중...'; + + +GO +ALTER TABLE [dbo].[HIST_TesterSummary] + ADD DEFAULT ('-') FOR [StationName]; + + +GO +PRINT N'DEFAULT 제약 조건 <이름 없음>을(를) 만드는 중...'; + + +GO +ALTER TABLE [dbo].[HIST_TesterSummary] + ADD DEFAULT ((-1)) FOR [TestListFileNo]; + + +GO +PRINT N'DEFAULT 제약 조건 <이름 없음>을(를) 만드는 중...'; + + +GO +ALTER TABLE [dbo].[HIST_TesterSummary] + ADD DEFAULT ((-1)) FOR [TestListVariantNo]; + + +GO +PRINT N'DEFAULT 제약 조건 <이름 없음>을(를) 만드는 중...'; + + +GO +ALTER TABLE [dbo].[HIST_TesterSummary] + ADD DEFAULT ((-1)) FOR [StepVersion]; + + +GO +PRINT N'DEFAULT 제약 조건 <이름 없음>을(를) 만드는 중...'; + + +GO +ALTER TABLE [dbo].[HIST_TesterSummary] + ADD DEFAULT (getdate()) FOR [TestDT]; + + +GO +PRINT N'외래 키 <이름 없음>을(를) 만드는 중...'; + + +GO +ALTER TABLE [dbo].[VRFY_TestListFileRelease] + ADD FOREIGN KEY ([TestListFileNo]) REFERENCES [dbo].[STOR_TestListFile] ([No]) ON DELETE SET NULL; + + +GO +PRINT N'외래 키 <이름 없음>을(를) 만드는 중...'; + + +GO +ALTER TABLE [dbo].[PROD_Variant] + ADD FOREIGN KEY ([GroupNo]) REFERENCES [dbo].[PROD_Group] ([No]) ON DELETE SET NULL; + + +GO +PRINT N'외래 키 <이름 없음>을(를) 만드는 중...'; + + +GO +ALTER TABLE [dbo].[PROD_Variant] + ADD FOREIGN KEY ([TestListFileNo]) REFERENCES [dbo].[STOR_TestListFile] ([No]) ON DELETE SET NULL; + + +GO +PRINT N'외래 키 <이름 없음>을(를) 만드는 중...'; + + +GO +ALTER TABLE [dbo].[PROD_Release] + ADD FOREIGN KEY ([TestCodeNo]) REFERENCES [dbo].[STAT_TestCode] ([No]) ON DELETE SET NULL; + + +GO +PRINT N'외래 키 <이름 없음>을(를) 만드는 중...'; + + +GO +ALTER TABLE [dbo].[PROD_Release] + ADD FOREIGN KEY ([VariantNo]) REFERENCES [dbo].[PROD_Variant] ([No]) ON DELETE SET NULL; + + +GO +PRINT N'외래 키 <이름 없음>을(를) 만드는 중...'; + + +GO +ALTER TABLE [dbo].[HIST_TestListFileVariantList] + ADD FOREIGN KEY ([TestListFileNo]) REFERENCES [dbo].[STOR_TestListFile] ([No]) ON DELETE SET NULL; + + +GO +PRINT N'외래 키 <이름 없음>을(를) 만드는 중...'; + + +GO +ALTER TABLE [dbo].[HIST_TestListFileLatestStepVersion] + ADD FOREIGN KEY ([TestListFileNo]) REFERENCES [dbo].[STOR_TestListFile] ([No]) ON DELETE SET NULL; + + +GO +PRINT N'외래 키 <이름 없음>을(를) 만드는 중...'; + + +GO +ALTER TABLE [dbo].[HIST_TestListFile] + ADD FOREIGN KEY ([TestListFileNo]) REFERENCES [dbo].[STOR_TestListFile] ([No]) ON DELETE SET NULL; + + +GO +PRINT N'CHECK 제약 조건 [dbo].[CK_PROD_TestList_UseTLPosition_2]을(를) 만드는 중...'; + + +GO +ALTER TABLE [dbo].[PROD_Variant] + ADD CONSTRAINT [CK_PROD_TestList_UseTLPosition_2] CHECK (([UseTLPosition]>=(0) AND [UseTLPosition]<=(10))); + + +GO +PRINT N'프로시저 [dbo].[spGetDBList]을(를) 만드는 중...'; + + +GO +CREATE PROCEDURE [dbo].[spGetDBList] + +AS + SELECT name FROM SYS.DATABASES WHERE name LIKE '%CPXV%' +RETURN 0 +GO +/* +배포 후 스크립트 템플릿 +-------------------------------------------------------------------------------------- + 이 파일에는 빌드 스크립트에 추가될 SQL 문이 있습니다. + SQLCMD 구문을 사용하여 파일을 배포 후 스크립트에 포함합니다. + 예: :r .\myfile.sql + SQLCMD 구문을 사용하여 배포 후 스크립트의 변수를 참조합니다. + 예: :setvar TableName MyTable + SELECT * FROM [$(TableName)] +-------------------------------------------------------------------------------------- +*/ + +--CPXV2 STAT_User 추가 +INSERT INTO STAT_User (UserID, Name, Password, Dept, Email, Comment) VALUES ('Admin', 'Admin', 'Kefico!@34', 'Admin', 'systemx2051@gmail.com', 'Administrator'); +GO + +INSERT INTO STAT_User (UserID, Name, Password, Dept, Email, Comment) VALUES ('SystemX', 'SystemX', 'Kefico!@34', 'SystemX', 'systemx2051@gmail.com', 'SystemX'); +GO + +GO +DECLARE @VarDecimalSupported AS BIT; + +SELECT @VarDecimalSupported = 0; + +IF ((ServerProperty(N'EngineEdition') = 3) + AND (((@@microsoftversion / power(2, 24) = 9) + AND (@@microsoftversion & 0xffff >= 3024)) + OR ((@@microsoftversion / power(2, 24) = 10) + AND (@@microsoftversion & 0xffff >= 1600)))) + SELECT @VarDecimalSupported = 1; + +IF (@VarDecimalSupported > 0) + BEGIN + EXECUTE sp_db_vardecimal_storage_format N'$(DatabaseName)', 'ON'; + END + + +GO +ALTER DATABASE [$(DatabaseName)] + SET MULTI_USER + WITH ROLLBACK IMMEDIATE; + + +GO +PRINT N'업데이트가 완료되었습니다.'; + + +GO diff --git a/DBPatch/sqlScripts/dacpac/SystemX.DB.CPXV2.dacpac b/DBPatch/sqlScripts/dacpac/SystemX.DB.CPXV2.dacpac new file mode 100644 index 0000000000000000000000000000000000000000..ed99e7d0d9ea98470ed466b985ed5e351bf1667d GIT binary patch literal 5806 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 E1?i?>mJSh-4uz$=TR`H1bayGSgrIc3 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 X?!*7ZtHb_3!~Hlu|MvR-mx2EQZfbvc diff --git a/Projects/DLL/SystemX.Core.dll b/Projects/DLL/SystemX.Core.dll index b113d4a40fa904340d2ff22900c2e427870210ce..6c77ffe84d17646540dfc95fd6d2cdbd9ae1c912 100644 GIT binary patch delta 238 zcmZqZVQ%PQp3uQ!GW*EvjXfbN1&qGf{w=)b=-u>Je$88*i~XBFtSlAKNHa_^F*8dw zG*3=4O*A!2OHMNYvP=?FjZ)1mO-+nVOp_9mlS~XZ_wF)gW;yz(;_T!jdjkZn-?|fg zs$rVzA_4P1=gpVwwExON^@*pw=astKaIhVA%($& z!3+pffoyYzWQHULQ-(w!He*Nw^3oU#pkgLK(NqQ_AU0>P1j?H*7z42>P<A%q@(~ERD=eEKJgp4HHw$QqwGxH}~!`W@cg76uEQqk-Y%|VvXVg zUiaU5H(LCN@p|F)ZnDb0ECr}wv?Ejyq`I9ktHHH(PHe1UQ_bde`=VI<%^8ds3>nfG z5*f@GQh{tsh9m}4AWUJf0FuTGCJg3488aYh0pyth<&A)(36N(3)Rhd>n+Q}3(whd9 LOWquQcqJ16A~;D= diff --git a/Projects/SystemX.Core/DB/SystemX.DB.CPXV2/SystemX.DB.CPXV2.sqlproj b/Projects/SystemX.Core/DB/SystemX.DB.CPXV2/SystemX.DB.CPXV2.sqlproj new file mode 100644 index 0000000..f0a9989 --- /dev/null +++ b/Projects/SystemX.Core/DB/SystemX.DB.CPXV2/SystemX.DB.CPXV2.sqlproj @@ -0,0 +1,89 @@ + + + + Debug + AnyCPU + SystemX.DB.CPXV2 + 2.0 + 4.1 + {3a2d7552-9c12-489f-8a0b-330e000c860d} + Microsoft.Data.Tools.Schema.Sql.Sql160DatabaseSchemaProvider + Database + + + SystemX.DB.CPXV2 + SystemX.DB.CPXV2 + 1042,CI + BySchemaAndSchemaType + True + v4.7.2 + CS + Properties + False + True + True + True + Korean_Wansung_CI_AS + + + bin\Release\ + $(MSBuildProjectName).sql + False + pdbonly + true + false + true + prompt + 4 + + + bin\Debug\ + $(MSBuildProjectName).sql + false + true + full + false + true + true + prompt + 4 + + + 11.0 + + True + 11.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + xcopy /y $(ProjectDir)$(OutputPath)$(TargetName)_Create.sql $(SolutionDir)..\..\DBPatch\sqlScripts\ + +xcopy /y $(ProjectDir)$(OutputPath)$(TargetName).dacpac $(SolutionDir)..\..\DBPatch\sqlScripts\dacpac\ + + \ No newline at end of file diff --git a/Projects/SystemX.Core/DB/SystemX.DB.CPXV2/dbo/Scripts/scriptAfterBuild.sql b/Projects/SystemX.Core/DB/SystemX.DB.CPXV2/dbo/Scripts/scriptAfterBuild.sql new file mode 100644 index 0000000..65ed61d --- /dev/null +++ b/Projects/SystemX.Core/DB/SystemX.DB.CPXV2/dbo/Scripts/scriptAfterBuild.sql @@ -0,0 +1,18 @@ +/* +배포 후 스크립트 템플릿 +-------------------------------------------------------------------------------------- + 이 파일에는 빌드 스크립트에 추가될 SQL 문이 있습니다. + SQLCMD 구문을 사용하여 파일을 배포 후 스크립트에 포함합니다. + 예: :r .\myfile.sql + SQLCMD 구문을 사용하여 배포 후 스크립트의 변수를 참조합니다. + 예: :setvar TableName MyTable + SELECT * FROM [$(TableName)] +-------------------------------------------------------------------------------------- +*/ + +--CPXV2 STAT_User 추가 +INSERT INTO STAT_User (UserID, Name, Password, Dept, Email, Comment) VALUES ('Admin', 'Admin', 'Kefico!@34', 'Admin', 'systemx2051@gmail.com', 'Administrator'); +GO + +INSERT INTO STAT_User (UserID, Name, Password, Dept, Email, Comment) VALUES ('SystemX', 'SystemX', 'Kefico!@34', 'SystemX', 'systemx2051@gmail.com', 'SystemX'); +GO \ No newline at end of file diff --git a/Projects/SystemX.Core/DB/SystemX.DB.CPXV2/dbo/SotredProcedures/spGetDBList.sql b/Projects/SystemX.Core/DB/SystemX.DB.CPXV2/dbo/SotredProcedures/spGetDBList.sql new file mode 100644 index 0000000..f2bfd09 --- /dev/null +++ b/Projects/SystemX.Core/DB/SystemX.DB.CPXV2/dbo/SotredProcedures/spGetDBList.sql @@ -0,0 +1,5 @@ +CREATE PROCEDURE [dbo].[spGetDBList] + +AS + SELECT name FROM SYS.DATABASES WHERE name LIKE '%CPXV%' +RETURN 0 diff --git a/Projects/SystemX.Core/DB/SystemX.DB.CPXV2/dbo/Tables/HIST_TestListFile.sql b/Projects/SystemX.Core/DB/SystemX.DB.CPXV2/dbo/Tables/HIST_TestListFile.sql new file mode 100644 index 0000000..5b933d5 --- /dev/null +++ b/Projects/SystemX.Core/DB/SystemX.DB.CPXV2/dbo/Tables/HIST_TestListFile.sql @@ -0,0 +1,28 @@ +CREATE TABLE [dbo].[HIST_TestListFile]( + [No] [bigint] IDENTITY(0,1) NOT NULL, + [TestListFileNo] [int] NULL, + [Name] [nvarchar](64) NOT NULL, + [TestListData1] [varbinary](max) NULL, + [TestListData2] [varbinary](max) NULL, + [TestListData3] [varbinary](max) NULL, + [TestListData4] [varbinary](max) NULL, + [TestListData5] [varbinary](max) NULL, + [TestListData6] [varbinary](max) NULL, + [TestListData7] [varbinary](max) NULL, + [TestListData8] [varbinary](max) NULL, + [TestListData9] [varbinary](max) NULL, + [TestListData10] [varbinary](max) NULL, +PRIMARY KEY CLUSTERED +( + [No] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY] +) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] +GO + +ALTER TABLE [dbo].[HIST_TestListFile] WITH CHECK ADD FOREIGN KEY([TestListFileNo]) +REFERENCES [dbo].[STOR_TestListFile] ([No]) +ON DELETE SET NULL +GO + +CREATE INDEX [CSK_HIST_TestList_2] ON HIST_TestListFile (TestListFileNo, Name, No); +GO diff --git a/Projects/SystemX.Core/DB/SystemX.DB.CPXV2/dbo/Tables/HIST_TestListFileLatestStepVersion.sql b/Projects/SystemX.Core/DB/SystemX.DB.CPXV2/dbo/Tables/HIST_TestListFileLatestStepVersion.sql new file mode 100644 index 0000000..8ece897 --- /dev/null +++ b/Projects/SystemX.Core/DB/SystemX.DB.CPXV2/dbo/Tables/HIST_TestListFileLatestStepVersion.sql @@ -0,0 +1,17 @@ +CREATE TABLE [dbo].[HIST_TestListFileLatestStepVersion]( + [No] [bigint] IDENTITY(0,1) NOT NULL, + [TestListFileNo] [int] NULL, + [LatestStepVersion] [int] NOT NULL, +PRIMARY KEY CLUSTERED +( + [No] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY] +) ON [PRIMARY] +GO + +ALTER TABLE [dbo].[HIST_TestListFileLatestStepVersion] WITH CHECK ADD FOREIGN KEY([TestListFileNo]) +REFERENCES [dbo].[STOR_TestListFile] ([No]) +ON DELETE SET NULL +GO + + diff --git a/Projects/SystemX.Core/DB/SystemX.DB.CPXV2/dbo/Tables/HIST_TestListFileVariantList.sql b/Projects/SystemX.Core/DB/SystemX.DB.CPXV2/dbo/Tables/HIST_TestListFileVariantList.sql new file mode 100644 index 0000000..b318f75 --- /dev/null +++ b/Projects/SystemX.Core/DB/SystemX.DB.CPXV2/dbo/Tables/HIST_TestListFileVariantList.sql @@ -0,0 +1,18 @@ +CREATE TABLE [dbo].[HIST_TestListFileVariantList]( + [No] [bigint] IDENTITY(0,1) NOT NULL, + [TestListFileNo] [int] NULL, + [VariantList] [nvarchar](2048) NULL, +PRIMARY KEY CLUSTERED +( + [No] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY] +) ON [PRIMARY] +GO + +ALTER TABLE [dbo].[HIST_TestListFileVariantList] WITH CHECK ADD FOREIGN KEY([TestListFileNo]) +REFERENCES [dbo].[STOR_TestListFile] ([No]) +ON DELETE SET NULL +GO + +CREATE INDEX [CSK_HIST_TestListFileVariantList_2] ON HIST_TestListFileVariantList (TestListFileNo, No); +GO \ No newline at end of file diff --git a/Projects/SystemX.Core/DB/SystemX.DB.CPXV2/dbo/Tables/HIST_TesterSummary.sql b/Projects/SystemX.Core/DB/SystemX.DB.CPXV2/dbo/Tables/HIST_TesterSummary.sql new file mode 100644 index 0000000..0f09069 --- /dev/null +++ b/Projects/SystemX.Core/DB/SystemX.DB.CPXV2/dbo/Tables/HIST_TesterSummary.sql @@ -0,0 +1,43 @@ +CREATE TABLE [dbo].[HIST_TesterSummary]( + [No] [bigint] IDENTITY(0,1) NOT NULL, + [StationName] [nvarchar](128) NULL, + [TestType] [nvarchar](8) NOT NULL, + [Version] [nvarchar](4) NOT NULL, + [ProdCode] [nvarchar](4) NOT NULL, + [TestListFileNo] [int] NULL, + [TestListVariantNo] [int] NULL, + [TestListCntID] [nvarchar](256) NULL, + [StepVersion] [int] NULL, + [HostID] [nvarchar](64) NOT NULL, + [Section] [nvarchar](64) NOT NULL, + [ProdNo_C] [nvarchar](32) NOT NULL, + [ProdNo_P] [nvarchar](32) NOT NULL, + [Testcode] [nvarchar](16) NOT NULL, + [TestListFileName] [nvarchar](256) NOT NULL, + [ProductID] [nvarchar](64) NOT NULL, + [Result] [nvarchar](16) NOT NULL, + [Duration] [nvarchar](16) NOT NULL, + [TestDT] [datetime2](7) NOT NULL, +UNIQUE NONCLUSTERED +( + [No] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY] +) ON [PRIMARY] +GO + +ALTER TABLE [dbo].[HIST_TesterSummary] ADD DEFAULT ('-') FOR [StationName] +GO + +ALTER TABLE [dbo].[HIST_TesterSummary] ADD DEFAULT ((-1)) FOR [TestListFileNo] +GO + +ALTER TABLE [dbo].[HIST_TesterSummary] ADD DEFAULT ((-1)) FOR [TestListVariantNo] +GO + +ALTER TABLE [dbo].[HIST_TesterSummary] ADD DEFAULT ((-1)) FOR [StepVersion] +GO + +ALTER TABLE [dbo].[HIST_TesterSummary] ADD DEFAULT (getdate()) FOR [TestDT] +GO + + diff --git a/Projects/SystemX.Core/DB/SystemX.DB.CPXV2/dbo/Tables/PROD_Group.sql b/Projects/SystemX.Core/DB/SystemX.DB.CPXV2/dbo/Tables/PROD_Group.sql new file mode 100644 index 0000000..ef5f484 --- /dev/null +++ b/Projects/SystemX.Core/DB/SystemX.DB.CPXV2/dbo/Tables/PROD_Group.sql @@ -0,0 +1,17 @@ +CREATE TABLE [dbo].[PROD_Group]( + [No] [int] IDENTITY(0,1) NOT NULL, + [GroupName] [nvarchar](128) NOT NULL, + [ModelName] [nvarchar](128) NOT NULL, + [Comment] [nvarchar](256) NULL, +PRIMARY KEY CLUSTERED +( + [No] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY], +UNIQUE NONCLUSTERED +( + [ModelName] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY] +) ON [PRIMARY] +GO + + diff --git a/Projects/SystemX.Core/DB/SystemX.DB.CPXV2/dbo/Tables/PROD_Release.sql b/Projects/SystemX.Core/DB/SystemX.DB.CPXV2/dbo/Tables/PROD_Release.sql new file mode 100644 index 0000000..cc57a7e --- /dev/null +++ b/Projects/SystemX.Core/DB/SystemX.DB.CPXV2/dbo/Tables/PROD_Release.sql @@ -0,0 +1,30 @@ +CREATE TABLE [dbo].[PROD_Release]( + [No] [int] IDENTITY(0,1) NOT NULL, + [ProdNo_C] [nvarchar](32) NOT NULL, + [TestCodeNo] [int] NULL, + [VariantNo] [int] NULL, + [Config] [nvarchar](32) NOT NULL, + [RegDT] [datetime2](7) NOT NULL, + [RegUser] [nvarchar](32) NOT NULL, + [RegUserComment] [nvarchar](256) NULL, +PRIMARY KEY CLUSTERED +( + [No] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY] +) ON [PRIMARY] +GO + +ALTER TABLE [dbo].[PROD_Release] ADD DEFAULT (getdate()) FOR [RegDT] +GO + +ALTER TABLE [dbo].[PROD_Release] WITH CHECK ADD FOREIGN KEY([TestCodeNo]) +REFERENCES [dbo].[STAT_TestCode] ([No]) +ON DELETE SET NULL +GO + +ALTER TABLE [dbo].[PROD_Release] WITH CHECK ADD FOREIGN KEY([VariantNo]) +REFERENCES [dbo].[PROD_Variant] ([No]) +ON DELETE SET NULL +GO + + diff --git a/Projects/SystemX.Core/DB/SystemX.DB.CPXV2/dbo/Tables/PROD_Variant.sql b/Projects/SystemX.Core/DB/SystemX.DB.CPXV2/dbo/Tables/PROD_Variant.sql new file mode 100644 index 0000000..313ed6c --- /dev/null +++ b/Projects/SystemX.Core/DB/SystemX.DB.CPXV2/dbo/Tables/PROD_Variant.sql @@ -0,0 +1,49 @@ +CREATE TABLE [dbo].[PROD_Variant]( + [No] [int] IDENTITY(0,1) NOT NULL, + [ProdNo_P] [nvarchar](32) NOT NULL, + [RegDT] [datetime2](7) NOT NULL, + [RegUser] [nvarchar](32) NOT NULL, + [UpdateDT] [datetime2](7) NOT NULL, + [UpdateUser] [nvarchar](32) NOT NULL, + [GroupNo] [int] NULL, + [Comment] [nvarchar](256) NULL, + [Description] [nvarchar](256) NULL, + [TestListFileNo] [int] NULL, + [UseTLPosition] [int] NOT NULL, + [IsUse] [bit] NOT NULL, +PRIMARY KEY CLUSTERED +( + [No] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY] +) ON [PRIMARY] +GO + +ALTER TABLE [dbo].[PROD_Variant] ADD DEFAULT (getdate()) FOR [RegDT] +GO + +ALTER TABLE [dbo].[PROD_Variant] ADD DEFAULT (getdate()) FOR [UpdateDT] +GO + +ALTER TABLE [dbo].[PROD_Variant] ADD DEFAULT ((0)) FOR [UseTLPosition] +GO + +ALTER TABLE [dbo].[PROD_Variant] ADD DEFAULT ((1)) FOR [IsUse] +GO + +ALTER TABLE [dbo].[PROD_Variant] WITH CHECK ADD FOREIGN KEY([GroupNo]) +REFERENCES [dbo].[PROD_Group] ([No]) +ON DELETE SET NULL +GO + +ALTER TABLE [dbo].[PROD_Variant] WITH CHECK ADD FOREIGN KEY([TestListFileNo]) +REFERENCES [dbo].[STOR_TestListFile] ([No]) +ON DELETE SET NULL +GO + +ALTER TABLE [dbo].[PROD_Variant] WITH CHECK ADD CONSTRAINT [CK_PROD_TestList_UseTLPosition_2] CHECK (([UseTLPosition]>=(0) AND [UseTLPosition]<=(10))) +GO + +ALTER TABLE [dbo].[PROD_Variant] CHECK CONSTRAINT [CK_PROD_TestList_UseTLPosition_2] +GO + + diff --git a/Projects/SystemX.Core/DB/SystemX.DB.CPXV2/dbo/Tables/STAT_Host.sql b/Projects/SystemX.Core/DB/SystemX.DB.CPXV2/dbo/Tables/STAT_Host.sql new file mode 100644 index 0000000..55a0c10 --- /dev/null +++ b/Projects/SystemX.Core/DB/SystemX.DB.CPXV2/dbo/Tables/STAT_Host.sql @@ -0,0 +1,19 @@ +CREATE TABLE [dbo].[STAT_Host]( + [No] [int] IDENTITY(0,1) NOT NULL, + [HostID] [nvarchar](64) NOT NULL, + [Section] [nvarchar](64) NOT NULL, + [IP] [nvarchar](15) NOT NULL, + [TestCode] [nvarchar](16) NULL, + [Comment] [nvarchar](256) NULL, + [UpdateDT] [datetime2](7) NOT NULL, +PRIMARY KEY CLUSTERED +( + [No] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY] +) ON [PRIMARY] +GO + +ALTER TABLE [dbo].[STAT_Host] ADD DEFAULT (getdate()) FOR [UpdateDT] +GO + + diff --git a/Projects/SystemX.Core/DB/SystemX.DB.CPXV2/dbo/Tables/STAT_TestCode.sql b/Projects/SystemX.Core/DB/SystemX.DB.CPXV2/dbo/Tables/STAT_TestCode.sql new file mode 100644 index 0000000..15d1e2a --- /dev/null +++ b/Projects/SystemX.Core/DB/SystemX.DB.CPXV2/dbo/Tables/STAT_TestCode.sql @@ -0,0 +1,18 @@ +CREATE TABLE [dbo].[STAT_TestCode]( + [No] [int] IDENTITY(0,1) NOT NULL, + [TestCode] [nvarchar](16) NOT NULL, + [Gate1] [nvarchar](64) NOT NULL, + [Gate2] [nvarchar](64) NOT NULL, + [Comment] [nvarchar](256) NULL, +PRIMARY KEY CLUSTERED +( + [No] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY], +UNIQUE NONCLUSTERED +( + [TestCode] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY] +) ON [PRIMARY] +GO + + diff --git a/Projects/SystemX.Core/DB/SystemX.DB.CPXV2/dbo/Tables/STAT_User.sql b/Projects/SystemX.Core/DB/SystemX.DB.CPXV2/dbo/Tables/STAT_User.sql new file mode 100644 index 0000000..224abf0 --- /dev/null +++ b/Projects/SystemX.Core/DB/SystemX.DB.CPXV2/dbo/Tables/STAT_User.sql @@ -0,0 +1,24 @@ +CREATE TABLE [dbo].[STAT_User]( + [No] [int] IDENTITY(0,1) NOT NULL, + [UserID] [nvarchar](32) NOT NULL, + [Name] [nvarchar](32) NOT NULL, + [Password] [nvarchar](32) NOT NULL, + [Dept] [nvarchar](64) NOT NULL, + [Email] [nvarchar](64) NOT NULL, + [Comment] [nvarchar](256) NULL, + [UpdateDT] [datetime2](7) NOT NULL, +PRIMARY KEY CLUSTERED +( + [No] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY], +UNIQUE NONCLUSTERED +( + [UserID] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY] +) ON [PRIMARY] +GO + +ALTER TABLE [dbo].[STAT_User] ADD DEFAULT (getdate()) FOR [UpdateDT] +GO + + diff --git a/Projects/SystemX.Core/DB/SystemX.DB.CPXV2/dbo/Tables/STOR_TestListFile.sql b/Projects/SystemX.Core/DB/SystemX.DB.CPXV2/dbo/Tables/STOR_TestListFile.sql new file mode 100644 index 0000000..03f7b4b --- /dev/null +++ b/Projects/SystemX.Core/DB/SystemX.DB.CPXV2/dbo/Tables/STOR_TestListFile.sql @@ -0,0 +1,28 @@ +CREATE TABLE [dbo].[STOR_TestListFile]( + [No] [int] IDENTITY(0,1) NOT NULL, + [Name] [nvarchar](64) NOT NULL, + [TestType] [nvarchar](8) NOT NULL, + [Version] [nvarchar](4) NOT NULL, + [ProdCode] [nvarchar](4) NOT NULL, + [FileName] [nvarchar](64) NOT NULL, + [RegDT] [datetime2](7) NOT NULL, + [RegUser] [nvarchar](32) NOT NULL, + [UpdateDT] [datetime2](7) NOT NULL, + [UpdateUser] [nvarchar](32) NOT NULL, + [Comment] [nvarchar](256) NULL, + [Description] [nvarchar](256) NULL, + [TestListData] [varbinary](max) NOT NULL, +PRIMARY KEY CLUSTERED +( + [No] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY] +) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] +GO + +ALTER TABLE [dbo].[STOR_TestListFile] ADD DEFAULT (getdate()) FOR [RegDT] +GO + +ALTER TABLE [dbo].[STOR_TestListFile] ADD DEFAULT (getdate()) FOR [UpdateDT] +GO + + diff --git a/Projects/SystemX.Core/DB/SystemX.DB.CPXV2/dbo/Tables/VRFY_TestListFileRelease.sql b/Projects/SystemX.Core/DB/SystemX.DB.CPXV2/dbo/Tables/VRFY_TestListFileRelease.sql new file mode 100644 index 0000000..f68cbcf --- /dev/null +++ b/Projects/SystemX.Core/DB/SystemX.DB.CPXV2/dbo/Tables/VRFY_TestListFileRelease.sql @@ -0,0 +1,48 @@ +CREATE TABLE [dbo].[VRFY_TestListFileRelease]( + [No] [bigint] IDENTITY(0,1) NOT NULL, + [TestListFileNo] [int] NULL, + [StepID] [bigint] NOT NULL, + [Variant] [nvarchar](32) NOT NULL, + [Gate] [nvarchar](128) NOT NULL, + [Activate] [bit] NULL, + [StepVersion] [int] NOT NULL, + [Enable] [bit] NULL, + [Position] [bigint] NULL, + [StepDesc] [nvarchar](2048) NULL, + [UseFunction] [nvarchar](2048) NOT NULL, + [MacroParm] [nvarchar](2048) NULL, + [Parm] [nvarchar](2048) NULL, + [SpecMin] [nvarchar](2048) NOT NULL, + [SpecMax] [nvarchar](2048) NOT NULL, + [IsGlobal] [bit] NULL, + [Dim] [nvarchar](64) NOT NULL, + [UpdateDT] [datetime2](7) NOT NULL, +PRIMARY KEY CLUSTERED +( + [No] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY] +) ON [PRIMARY] +GO + +ALTER TABLE [dbo].[VRFY_TestListFileRelease] ADD DEFAULT ((1)) FOR [Activate] +GO + +ALTER TABLE [dbo].[VRFY_TestListFileRelease] ADD DEFAULT ((1)) FOR [Enable] +GO + +ALTER TABLE [dbo].[VRFY_TestListFileRelease] ADD DEFAULT ('') FOR [StepDesc] +GO + +ALTER TABLE [dbo].[VRFY_TestListFileRelease] ADD DEFAULT ((0)) FOR [IsGlobal] +GO + +ALTER TABLE [dbo].[VRFY_TestListFileRelease] ADD DEFAULT (getdate()) FOR [UpdateDT] +GO + +ALTER TABLE [dbo].[VRFY_TestListFileRelease] WITH NOCHECK ADD FOREIGN KEY([TestListFileNo]) +REFERENCES [dbo].[STOR_TestListFile] ([No]) +ON DELETE SET NULL +GO + +CREATE INDEX [CSK_VRFY_Release_2] ON VRFY_TestListFileRelease (TestListFileNo, StepID, Enable, No); +GO \ No newline at end of file diff --git a/Projects/SystemX.Core/DB/SystemX.DB.CPXV2Log/SystemX.DB.CPXV2Log.sqlproj b/Projects/SystemX.Core/DB/SystemX.DB.CPXV2Log/SystemX.DB.CPXV2Log.sqlproj new file mode 100644 index 0000000..87539c6 --- /dev/null +++ b/Projects/SystemX.Core/DB/SystemX.DB.CPXV2Log/SystemX.DB.CPXV2Log.sqlproj @@ -0,0 +1,82 @@ + + + + Debug + AnyCPU + SystemX.DB.CPXV2Log + 2.0 + 4.1 + {d9439c52-76b5-4908-9b0d-43d1f52ec942} + Microsoft.Data.Tools.Schema.Sql.Sql160DatabaseSchemaProvider + Database + + + SystemX.DB.CPXV2Log + SystemX.DB.CPXV2Log + 1042,CI + BySchemaAndSchemaType + True + v4.7.2 + CS + Properties + False + True + True + True + Korean_Wansung_CI_AS + + + bin\Release\ + $(MSBuildProjectName).sql + False + pdbonly + true + false + true + prompt + 4 + + + bin\Debug\ + $(MSBuildProjectName).sql + false + true + full + false + true + true + prompt + 4 + + + 11.0 + + True + 11.0 + + + + + + + + + + + + + + + + + + + + + + + xcopy /y $(ProjectDir)$(OutputPath)$(TargetName)_Create.sql $(SolutionDir)..\..\DBPatch\sqlScripts\ + +xcopy /y $(ProjectDir)$(OutputPath)$(TargetName).dacpac $(SolutionDir)..\..\DBPatch\sqlScripts\dacpac\ + + \ No newline at end of file diff --git a/Projects/SystemX.Core/DB/SystemX.DB.CPXV2Log/dbo/Functions/Scala/XConvertDateE.sql b/Projects/SystemX.Core/DB/SystemX.DB.CPXV2Log/dbo/Functions/Scala/XConvertDateE.sql new file mode 100644 index 0000000..bd47a50 --- /dev/null +++ b/Projects/SystemX.Core/DB/SystemX.DB.CPXV2Log/dbo/Functions/Scala/XConvertDateE.sql @@ -0,0 +1,23 @@ +-- ============================================= +-- Author: +-- Create date: +-- Description: +-- ============================================= +CREATE FUNCTION [dbo].[XConvertDateE] +( + -- Add the parameters for the function here + @date AS VARCHAR(50) +) +RETURNS VARCHAR(50) + AS + BEGIN + DECLARE @OutDate datetime2 + SET @OutDate = CASE WHEN CHARINDEX('PM',@date)>0 and CHARINDEX('PM 12',@date)<=0 THEN + DATEADD(HH,12,CONVERT (DATETIME, REPLACE(@date,'PM',''))) + WHEN CHARINDEX('AM 12',@date)>0 THEN + DATEADD(HH,-12,CONVERT (DATETIME, REPLACE(@date,'AM',''))) + ELSE CONVERT (DATETIME,REPLACE(REPLACE(@date,'AM',''),'PM','') ) + END + RETURN @OutDate + END +GO \ No newline at end of file diff --git a/Projects/SystemX.Core/DB/SystemX.DB.CPXV2Log/dbo/Functions/Scala/XConvertDateK.sql b/Projects/SystemX.Core/DB/SystemX.DB.CPXV2Log/dbo/Functions/Scala/XConvertDateK.sql new file mode 100644 index 0000000..332e00f --- /dev/null +++ b/Projects/SystemX.Core/DB/SystemX.DB.CPXV2Log/dbo/Functions/Scala/XConvertDateK.sql @@ -0,0 +1,25 @@ +-- ============================================= +-- Author: +-- Create date: +-- Description: +-- ============================================= +CREATE FUNCTION [dbo].[XConvertDateK] +( + -- Add the parameters for the function here + @date AS VARCHAR(50) +) +RETURNS VARCHAR(50) + AS + BEGIN + DECLARE @OutDate datetime2 + SET @OutDate = CASE WHEN CHARINDEX('오후',@date)>0 and CHARINDEX('오후 12',@date)<=0 THEN + DATEADD(HH,12,CONVERT (DATETIME, REPLACE(@date,'오후',''))) + WHEN CHARINDEX('오전 12',@date)>0 THEN + DATEADD(HH,-12,CONVERT (DATETIME, REPLACE(@date,'오전',''))) + ELSE CONVERT (DATETIME,REPLACE(REPLACE(@date,'오전',''),'오후','') ) + END + RETURN @OutDate + END +GO + + diff --git a/Projects/SystemX.Core/DB/SystemX.DB.CPXV2Log/dbo/Scripts/scriptCreateTables.sql b/Projects/SystemX.Core/DB/SystemX.DB.CPXV2Log/dbo/Scripts/scriptCreateTables.sql new file mode 100644 index 0000000..90f8ba7 --- /dev/null +++ b/Projects/SystemX.Core/DB/SystemX.DB.CPXV2Log/dbo/Scripts/scriptCreateTables.sql @@ -0,0 +1,31 @@ +/* +배포 후 스크립트 템플릿 +-------------------------------------------------------------------------------------- + 이 파일에는 빌드 스크립트에 추가될 SQL 문이 있습니다. + SQLCMD 구문을 사용하여 파일을 배포 후 스크립트에 포함합니다. + 예: :r .\myfile.sql + SQLCMD 구문을 사용하여 배포 후 스크립트의 변수를 참조합니다. + 예: :setvar TableName MyTable + SELECT * FROM [$(TableName)] +-------------------------------------------------------------------------------------- +*/ + +/*10회 루프*/ +DECLARE @CNT INT = 0; +DECLARE @MAX_CNT INT = 10 +DECLARE @DBNAME varchar(50) = DB_NAME(); + +IF (@DBNAME LIKE '%short%') +BEGIN + WHILE(@CNT < @MAX_CNT) + BEGIN + + DECLARE @yyyy varchar(4) = CONVERT(CHAR(4), DATEADD(YEAR, @CNT, GETDATE()), 23) + DECLARE @summary varchar(200) = N'HIST_LogSummary_'+@yyyy + DECLARE @result varchar(200) = N'HIST_TestResult_'+@yyyy + EXEC [dbo].[spCreateTableByName] @summary , @result + + SET @CNT += 1 + END +END +GO diff --git a/Projects/SystemX.Core/DB/SystemX.DB.CPXV2Log/dbo/StoredProcedures/spCreateTableByName.sql b/Projects/SystemX.Core/DB/SystemX.DB.CPXV2Log/dbo/StoredProcedures/spCreateTableByName.sql new file mode 100644 index 0000000..96a1e81 --- /dev/null +++ b/Projects/SystemX.Core/DB/SystemX.DB.CPXV2Log/dbo/StoredProcedures/spCreateTableByName.sql @@ -0,0 +1,78 @@ +CREATE PROCEDURE [dbo].[spCreateTableByName] + @logSummaryTableName nvarchar(200), + @logResultTableName nvarchar(200) +AS + IF NOT EXISTS(SELECT * FROM sys.tables WHERE NAME = @logSummaryTableName) + BEGIN + DECLARE @summaryQuery nvarchar(4000)= N' + CREATE TABLE [dbo].['+@logSummaryTableName+']( + [No] [bigint] IDENTITY(0,1) NOT NULL, + [StationName] [nvarchar](128) NULL, + [TestType] [nvarchar](8) NOT NULL, + [Version] [nvarchar](4) NOT NULL, + [ProdCode] [nvarchar](4) NOT NULL, + [TestListFileNo] [int] NULL, + [TestListVariantNo] [int] NULL, + [TestListCntID] [nvarchar](256) NULL, + [StepVersion] [int] NULL, + [HostID] [nvarchar](64) NOT NULL, + [Section] [nvarchar](64) NOT NULL, + [ProdNo_C] [nvarchar](32) NOT NULL, + [ProdNo_P] [nvarchar](32) NOT NULL, + [Testcode] [nvarchar](16) NOT NULL, + [TestListFileName] [nvarchar](256) NOT NULL, + [ProductID] [nvarchar](64) NOT NULL, + [Result] [nvarchar](16) NOT NULL, + [Duration] [nvarchar](16) NOT NULL, + [TestDT] [datetime2](7) NOT NULL, + CONSTRAINT [PK_'+@logSummaryTableName+'] PRIMARY KEY CLUSTERED + ( + [No] ASC + )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY], + UNIQUE NONCLUSTERED + ( + [No] ASC + )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY] + ) ON [PRIMARY] + + ALTER TABLE [dbo].['+@logSummaryTableName+'] ADD DEFAULT (''-'') FOR [StationName] + + ALTER TABLE [dbo].['+@logSummaryTableName+'] ADD DEFAULT ((-1)) FOR [TestListFileNo] + + ALTER TABLE [dbo].['+@logSummaryTableName+'] ADD DEFAULT ((-1)) FOR [TestListVariantNo] + + ALTER TABLE [dbo].['+@logSummaryTableName+'] ADD DEFAULT ((-1)) FOR [StepVersion] + + ALTER TABLE [dbo].['+@logSummaryTableName+'] ADD DEFAULT (getdate()) FOR [TestDT] + + CREATE INDEX ['+@logSummaryTableName+'_2] ON '+@logSummaryTableName+' (TestDT, No); + + CREATE INDEX ['+@logSummaryTableName+'_3] ON '+@logSummaryTableName+' (TestDT); + '; + + EXEC(@summaryQuery) + END + + + IF NOT EXISTS(SELECT * FROM sys.tables WHERE NAME = @logResultTableName) + BEGIN + DECLARE @resultQuery nvarchar(4000)= N' + CREATE TABLE [dbo].['+@logResultTableName+']( + [No] [bigint] NOT NULL, + [TestDT] [datetime2](7) NULL, + [LogData] [nvarchar](max) NOT NULL, + CONSTRAINT [PK_'+@logResultTableName+'] PRIMARY KEY CLUSTERED + ( + [No] ASC + )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY] + ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] + + ALTER TABLE [dbo].['+@logResultTableName+'] ADD DEFAULT (getdate()) FOR [TestDT] + + CREATE INDEX ['+@logResultTableName+'_2] ON '+@logResultTableName+' (TestDT, No); + + CREATE INDEX ['+@logResultTableName+'_3] ON '+@logResultTableName+' (TestDT); + '; + EXEC(@resultQuery) + END +RETURN 0 diff --git a/Projects/SystemX.Core/DB/SystemX.DB.CPXV2Log/dbo/StoredProcedures/spCreateTableMonth.sql b/Projects/SystemX.Core/DB/SystemX.DB.CPXV2Log/dbo/StoredProcedures/spCreateTableMonth.sql new file mode 100644 index 0000000..b68dc18 --- /dev/null +++ b/Projects/SystemX.Core/DB/SystemX.DB.CPXV2Log/dbo/StoredProcedures/spCreateTableMonth.sql @@ -0,0 +1,37 @@ +CREATE PROCEDURE [dbo].[spCreateTableMonth] + +AS + --현재 월 HIST_TestResult 테이블 생성 + DECLARE @current_yymm varchar(4) = CONVERT(CHAR(4), GETDATE(), 12) + + DECLARE @current_summaryTableName varchar(40) = N'HIST_LogSummary_'+@current_yymm + DECLARE @current_summary_query varchar(200) = N' SELECT * INTO ' + @current_summaryTableName + N' FROM HIST_LogSummary' + IF NOT EXISTS(SELECT * FROM sys.tables WHERE NAME = @current_summaryTableName) + BEGIN + EXEC(@current_summary_query) + END + + DECLARE @current_resultTableName varchar(40) = N'HIST_TestResult_'+@current_yymm + DECLARE @current_result_query varchar(200) = N' SELECT * INTO ' + @current_resultTableName + N' FROM HIST_TestResult' + IF NOT EXISTS(SELECT * FROM sys.tables WHERE NAME = @current_resultTableName) + BEGIN + EXEC(@current_result_query) + END + + --다음 월 HIST_TestResult 테이블 생성 + DECLARE @next_yymm varchar(4) = CONVERT(CHAR(4), DATEADD(MONTH, 1, GETDATE()), 12) + + DECLARE @next_summaryTableName varchar(40) = N'HIST_LogSummary_'+@next_yymm + DECLARE @next_summary_query varchar(200) = N' SELECT * INTO ' + @next_summaryTableName + N' FROM HIST_LogSummary' + IF NOT EXISTS(SELECT * FROM sys.tables WHERE NAME = @next_summaryTableName) + BEGIN + EXEC(@next_summary_query) + END + + DECLARE @next_resultTableName varchar(40) = N'HIST_TestResult_'+@next_yymm + DECLARE @next_result_query varchar(200) = N' SELECT * INTO ' + @next_resultTableName + N' FROM HIST_TestResult' + IF NOT EXISTS(SELECT * FROM sys.tables WHERE NAME = @next_resultTableName) + BEGIN + EXEC(@next_result_query) + END +RETURN 0 diff --git a/Projects/SystemX.Core/DB/SystemX.DB.CPXV2Log/dbo/Tables/HIST_LogSummary.sql b/Projects/SystemX.Core/DB/SystemX.DB.CPXV2Log/dbo/Tables/HIST_LogSummary.sql new file mode 100644 index 0000000..dd6b825 --- /dev/null +++ b/Projects/SystemX.Core/DB/SystemX.DB.CPXV2Log/dbo/Tables/HIST_LogSummary.sql @@ -0,0 +1,51 @@ +CREATE TABLE [dbo].[HIST_LogSummary]( + [No] [bigint] IDENTITY(0,1) NOT NULL, + [StationName] [nvarchar](128) NULL, + [TestType] [nvarchar](8) NOT NULL, + [Version] [nvarchar](4) NOT NULL, + [ProdCode] [nvarchar](4) NOT NULL, + [TestListFileNo] [int] NULL, + [TestListVariantNo] [int] NULL, + [TestListCntID] [nvarchar](256) NULL, + [StepVersion] [int] NULL, + [HostID] [nvarchar](64) NOT NULL, + [Section] [nvarchar](64) NOT NULL, + [ProdNo_C] [nvarchar](32) NOT NULL, + [ProdNo_P] [nvarchar](32) NOT NULL, + [Testcode] [nvarchar](16) NOT NULL, + [TestListFileName] [nvarchar](256) NOT NULL, + [ProductID] [nvarchar](64) NOT NULL, + [Result] [nvarchar](16) NOT NULL, + [Duration] [nvarchar](16) NOT NULL, + [TestDT] [datetime2](7) NOT NULL, +UNIQUE NONCLUSTERED +( + [No] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY], + CONSTRAINT [PK_HIST_LogSummary] PRIMARY KEY ([No]) +) ON [PRIMARY] +GO + + +GO + +ALTER TABLE [dbo].[HIST_LogSummary] ADD DEFAULT ('-') FOR [StationName] +GO + +ALTER TABLE [dbo].[HIST_LogSummary] ADD DEFAULT ((-1)) FOR [TestListFileNo] +GO + +ALTER TABLE [dbo].[HIST_LogSummary] ADD DEFAULT ((-1)) FOR [TestListVariantNo] +GO + +ALTER TABLE [dbo].[HIST_LogSummary] ADD DEFAULT ((-1)) FOR [StepVersion] +GO + +ALTER TABLE [dbo].[HIST_LogSummary] ADD DEFAULT (getdate()) FOR [TestDT] +GO + +CREATE INDEX [HIST_LogSummary_2] ON HIST_LogSummary (TestDT, No); +GO + +CREATE INDEX [HIST_LogSummary_3] ON HIST_LogSummary (TestDT); +GO \ No newline at end of file diff --git a/Projects/SystemX.Core/DB/SystemX.DB.CPXV2Log/dbo/Tables/HIST_TestResult.sql b/Projects/SystemX.Core/DB/SystemX.DB.CPXV2Log/dbo/Tables/HIST_TestResult.sql new file mode 100644 index 0000000..be0f651 --- /dev/null +++ b/Projects/SystemX.Core/DB/SystemX.DB.CPXV2Log/dbo/Tables/HIST_TestResult.sql @@ -0,0 +1,19 @@ +CREATE TABLE [dbo].[HIST_TestResult]( + [No] [bigint] NOT NULL, + [TestDT] [datetime2](7) NULL, + [LogData] [nvarchar](MAX) NOT NULL, + CONSTRAINT [PK_HIST_TestResult] PRIMARY KEY CLUSTERED +( + [No] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY] +) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] +GO + +ALTER TABLE [dbo].[HIST_TestResult] ADD DEFAULT (getdate()) FOR [TestDT] +GO + +CREATE INDEX [HIST_TestResult_2] ON HIST_TestResult (TestDT, No); +GO + +CREATE INDEX [HIST_TestResult_3] ON HIST_TestResult (TestDT); +GO \ No newline at end of file diff --git a/Projects/SystemX.Core/SystemX.Core.DB/CPXV2/Context/CPXV2.cs b/Projects/SystemX.Core/SystemX.Core.DB/CPXV2/Context/CPXV2.cs new file mode 100644 index 0000000..855a063 --- /dev/null +++ b/Projects/SystemX.Core/SystemX.Core.DB/CPXV2/Context/CPXV2.cs @@ -0,0 +1,275 @@ +using System; +using System.Collections.Generic; +using Microsoft.EntityFrameworkCore; + +namespace SystemX.Core.DB; + +public partial class CPXV2 : DbContext +{ + public CPXV2(DbContextOptions options) + : base(options) + { + } + + public virtual DbSet HIST_TestListFiles { get; set; } + + public virtual DbSet HIST_TestListFileLatestStepVersions { get; set; } + + public virtual DbSet HIST_TestListFileVariantLists { get; set; } + + public virtual DbSet HIST_TesterSummaries { get; set; } + + public virtual DbSet PROD_Groups { get; set; } + + public virtual DbSet PROD_Releases { get; set; } + + public virtual DbSet PROD_Variants { get; set; } + + public virtual DbSet STAT_Hosts { get; set; } + + public virtual DbSet STAT_TestCodes { get; set; } + + public virtual DbSet STAT_Users { get; set; } + + public virtual DbSet STOR_TestListFiles { get; set; } + + public virtual DbSet VRFY_TestListFileReleases { get; set; } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity(entity => + { + entity.HasKey(e => e.No).HasName("PK__HIST_Tes__3214D4A8C38F3D8E"); + + entity.ToTable("HIST_TestListFile"); + + entity.HasIndex(e => new { e.TestListFileNo, e.Name, e.No }, "CSK_HIST_TestList_2"); + + entity.Property(e => e.Name).HasMaxLength(64); + + entity.HasOne(d => d.TestListFileNoNavigation).WithMany(p => p.HIST_TestListFiles) + .HasForeignKey(d => d.TestListFileNo) + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK__HIST_Test__TestL__68487DD7"); + }); + + modelBuilder.Entity(entity => + { + entity.HasKey(e => e.No).HasName("PK__HIST_Tes__3214D4A80FA7E1DA"); + + entity.ToTable("HIST_TestListFileLatestStepVersion"); + + entity.HasOne(d => d.TestListFileNoNavigation).WithMany(p => p.HIST_TestListFileLatestStepVersions) + .HasForeignKey(d => d.TestListFileNo) + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK__HIST_Test__TestL__6754599E"); + }); + + modelBuilder.Entity(entity => + { + entity.HasKey(e => e.No).HasName("PK__HIST_Tes__3214D4A8BA392490"); + + entity.ToTable("HIST_TestListFileVariantList"); + + entity.HasIndex(e => new { e.TestListFileNo, e.No }, "CSK_HIST_TestListFileVariantList_2"); + + entity.Property(e => e.VariantList).HasMaxLength(2048); + + entity.HasOne(d => d.TestListFileNoNavigation).WithMany(p => p.HIST_TestListFileVariantLists) + .HasForeignKey(d => d.TestListFileNo) + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK__HIST_Test__TestL__66603565"); + }); + + modelBuilder.Entity(entity => + { + entity + .HasNoKey() + .ToTable("HIST_TesterSummary"); + + entity.HasIndex(e => e.No, "UQ__HIST_Tes__3214D4A9D65E09B4").IsUnique(); + + entity.Property(e => e.Duration).HasMaxLength(16); + entity.Property(e => e.HostID).HasMaxLength(64); + entity.Property(e => e.No).ValueGeneratedOnAdd(); + entity.Property(e => e.ProdCode).HasMaxLength(4); + entity.Property(e => e.ProdNo_C).HasMaxLength(32); + entity.Property(e => e.ProdNo_P).HasMaxLength(32); + entity.Property(e => e.ProductID).HasMaxLength(64); + entity.Property(e => e.Result).HasMaxLength(16); + entity.Property(e => e.Section).HasMaxLength(64); + entity.Property(e => e.StationName) + .HasMaxLength(128) + .HasDefaultValue("-"); + entity.Property(e => e.StepVersion).HasDefaultValue(-1); + entity.Property(e => e.TestDT).HasDefaultValueSql("(getdate())"); + entity.Property(e => e.TestListCntID).HasMaxLength(256); + entity.Property(e => e.TestListFileName).HasMaxLength(256); + entity.Property(e => e.TestListFileNo).HasDefaultValue(-1); + entity.Property(e => e.TestListVariantNo).HasDefaultValue(-1); + entity.Property(e => e.TestType).HasMaxLength(8); + entity.Property(e => e.Testcode).HasMaxLength(16); + entity.Property(e => e.Version).HasMaxLength(4); + }); + + modelBuilder.Entity(entity => + { + entity.HasKey(e => e.No).HasName("PK__PROD_Gro__3214D4A8A3CE9C41"); + + entity.ToTable("PROD_Group"); + + entity.HasIndex(e => e.ModelName, "UQ__PROD_Gro__67DC63B5E6F58A45").IsUnique(); + + entity.Property(e => e.Comment).HasMaxLength(256); + entity.Property(e => e.GroupName).HasMaxLength(128); + entity.Property(e => e.ModelName).HasMaxLength(128); + }); + + modelBuilder.Entity(entity => + { + entity.HasKey(e => e.No).HasName("PK__PROD_Rel__3214D4A86EAA1A79"); + + entity.ToTable("PROD_Release"); + + entity.Property(e => e.Config).HasMaxLength(32); + entity.Property(e => e.ProdNo_C).HasMaxLength(32); + entity.Property(e => e.RegDT).HasDefaultValueSql("(getdate())"); + entity.Property(e => e.RegUser).HasMaxLength(32); + entity.Property(e => e.RegUserComment).HasMaxLength(256); + + entity.HasOne(d => d.TestCodeNoNavigation).WithMany(p => p.PROD_Releases) + .HasForeignKey(d => d.TestCodeNo) + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK__PROD_Rele__TestC__6477ECF3"); + + entity.HasOne(d => d.VariantNoNavigation).WithMany(p => p.PROD_Releases) + .HasForeignKey(d => d.VariantNo) + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK__PROD_Rele__Varia__656C112C"); + }); + + modelBuilder.Entity(entity => + { + entity.HasKey(e => e.No).HasName("PK__PROD_Var__3214D4A8DEBD410D"); + + entity.ToTable("PROD_Variant"); + + entity.Property(e => e.Comment).HasMaxLength(256); + entity.Property(e => e.Description).HasMaxLength(256); + entity.Property(e => e.IsUse).HasDefaultValue(true); + entity.Property(e => e.ProdNo_P).HasMaxLength(32); + entity.Property(e => e.RegDT).HasDefaultValueSql("(getdate())"); + entity.Property(e => e.RegUser).HasMaxLength(32); + entity.Property(e => e.UpdateDT).HasDefaultValueSql("(getdate())"); + entity.Property(e => e.UpdateUser).HasMaxLength(32); + + entity.HasOne(d => d.GroupNoNavigation).WithMany(p => p.PROD_Variants) + .HasForeignKey(d => d.GroupNo) + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK__PROD_Vari__Group__628FA481"); + + entity.HasOne(d => d.TestListFileNoNavigation).WithMany(p => p.PROD_Variants) + .HasForeignKey(d => d.TestListFileNo) + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK__PROD_Vari__TestL__6383C8BA"); + }); + + modelBuilder.Entity(entity => + { + entity.HasKey(e => e.No).HasName("PK__STAT_Hos__3214D4A8B3A9E118"); + + entity.ToTable("STAT_Host"); + + entity.Property(e => e.Comment).HasMaxLength(256); + entity.Property(e => e.HostID).HasMaxLength(64); + entity.Property(e => e.IP).HasMaxLength(15); + entity.Property(e => e.Section).HasMaxLength(64); + entity.Property(e => e.TestCode).HasMaxLength(16); + entity.Property(e => e.UpdateDT).HasDefaultValueSql("(getdate())"); + }); + + modelBuilder.Entity(entity => + { + entity.HasKey(e => e.No).HasName("PK__STAT_Tes__3214D4A8759E255B"); + + entity.ToTable("STAT_TestCode"); + + entity.HasIndex(e => e.TestCode, "UQ__STAT_Tes__0B0C35F71EDB4C9E").IsUnique(); + + entity.Property(e => e.Comment).HasMaxLength(256); + entity.Property(e => e.Gate1).HasMaxLength(64); + entity.Property(e => e.Gate2).HasMaxLength(64); + entity.Property(e => e.TestCode).HasMaxLength(16); + }); + + modelBuilder.Entity(entity => + { + entity.HasKey(e => e.No).HasName("PK__STAT_Use__3214D4A8F88707CA"); + + entity.ToTable("STAT_User"); + + entity.HasIndex(e => e.UserID, "UQ__STAT_Use__1788CCAD04FDA05E").IsUnique(); + + entity.Property(e => e.Comment).HasMaxLength(256); + entity.Property(e => e.Dept).HasMaxLength(64); + entity.Property(e => e.Email).HasMaxLength(64); + entity.Property(e => e.Name).HasMaxLength(32); + entity.Property(e => e.Password).HasMaxLength(32); + entity.Property(e => e.UpdateDT).HasDefaultValueSql("(getdate())"); + entity.Property(e => e.UserID).HasMaxLength(32); + }); + + modelBuilder.Entity(entity => + { + entity.HasKey(e => e.No).HasName("PK__STOR_Tes__3214D4A8082195B1"); + + entity.ToTable("STOR_TestListFile"); + + entity.Property(e => e.Comment).HasMaxLength(256); + entity.Property(e => e.Description).HasMaxLength(256); + entity.Property(e => e.FileName).HasMaxLength(64); + entity.Property(e => e.Name).HasMaxLength(64); + entity.Property(e => e.ProdCode).HasMaxLength(4); + entity.Property(e => e.RegDT).HasDefaultValueSql("(getdate())"); + entity.Property(e => e.RegUser).HasMaxLength(32); + entity.Property(e => e.TestType).HasMaxLength(8); + entity.Property(e => e.UpdateDT).HasDefaultValueSql("(getdate())"); + entity.Property(e => e.UpdateUser).HasMaxLength(32); + entity.Property(e => e.Version).HasMaxLength(4); + }); + + modelBuilder.Entity(entity => + { + entity.HasKey(e => e.No).HasName("PK__VRFY_Tes__3214D4A84ACCA9A3"); + + entity.ToTable("VRFY_TestListFileRelease"); + + entity.HasIndex(e => new { e.TestListFileNo, e.StepID, e.Enable, e.No }, "CSK_VRFY_Release_2"); + + entity.Property(e => e.Activate).HasDefaultValue(true); + entity.Property(e => e.Dim).HasMaxLength(64); + entity.Property(e => e.Enable).HasDefaultValue(true); + entity.Property(e => e.Gate).HasMaxLength(128); + entity.Property(e => e.IsGlobal).HasDefaultValue(false); + entity.Property(e => e.MacroParm).HasMaxLength(2048); + entity.Property(e => e.Parm).HasMaxLength(2048); + entity.Property(e => e.SpecMax).HasMaxLength(2048); + entity.Property(e => e.SpecMin).HasMaxLength(2048); + entity.Property(e => e.StepDesc) + .HasMaxLength(2048) + .HasDefaultValue(""); + entity.Property(e => e.UpdateDT).HasDefaultValueSql("(getdate())"); + entity.Property(e => e.UseFunction).HasMaxLength(2048); + entity.Property(e => e.Variant).HasMaxLength(32); + + entity.HasOne(d => d.TestListFileNoNavigation).WithMany(p => p.VRFY_TestListFileReleases) + .HasForeignKey(d => d.TestListFileNo) + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK__VRFY_Test__TestL__619B8048"); + }); + + OnModelCreatingPartial(modelBuilder); + } + + partial void OnModelCreatingPartial(ModelBuilder modelBuilder); +} diff --git a/Projects/SystemX.Core/SystemX.Core.DB/CPXV2/Tables/HIST_TestListFile.cs b/Projects/SystemX.Core/SystemX.Core.DB/CPXV2/Tables/HIST_TestListFile.cs new file mode 100644 index 0000000..f6b16a0 --- /dev/null +++ b/Projects/SystemX.Core/SystemX.Core.DB/CPXV2/Tables/HIST_TestListFile.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; + +namespace SystemX.Core.DB; + +public partial class HIST_TestListFile +{ + public long No { get; set; } + + public int? TestListFileNo { get; set; } + + public string Name { get; set; } = null!; + + public byte[]? TestListData1 { get; set; } + + public byte[]? TestListData2 { get; set; } + + public byte[]? TestListData3 { get; set; } + + public byte[]? TestListData4 { get; set; } + + public byte[]? TestListData5 { get; set; } + + public byte[]? TestListData6 { get; set; } + + public byte[]? TestListData7 { get; set; } + + public byte[]? TestListData8 { get; set; } + + public byte[]? TestListData9 { get; set; } + + public byte[]? TestListData10 { get; set; } + + public virtual STOR_TestListFile? TestListFileNoNavigation { get; set; } +} diff --git a/Projects/SystemX.Core/SystemX.Core.DB/CPXV2/Tables/HIST_TestListFileLatestStepVersion.cs b/Projects/SystemX.Core/SystemX.Core.DB/CPXV2/Tables/HIST_TestListFileLatestStepVersion.cs new file mode 100644 index 0000000..5f104ba --- /dev/null +++ b/Projects/SystemX.Core/SystemX.Core.DB/CPXV2/Tables/HIST_TestListFileLatestStepVersion.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; + +namespace SystemX.Core.DB; + +public partial class HIST_TestListFileLatestStepVersion +{ + public long No { get; set; } + + public int? TestListFileNo { get; set; } + + public int LatestStepVersion { get; set; } + + public virtual STOR_TestListFile? TestListFileNoNavigation { get; set; } +} diff --git a/Projects/SystemX.Core/SystemX.Core.DB/CPXV2/Tables/HIST_TestListFileVariantList.cs b/Projects/SystemX.Core/SystemX.Core.DB/CPXV2/Tables/HIST_TestListFileVariantList.cs new file mode 100644 index 0000000..44fca50 --- /dev/null +++ b/Projects/SystemX.Core/SystemX.Core.DB/CPXV2/Tables/HIST_TestListFileVariantList.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; + +namespace SystemX.Core.DB; + +public partial class HIST_TestListFileVariantList +{ + public long No { get; set; } + + public int? TestListFileNo { get; set; } + + public string? VariantList { get; set; } + + public virtual STOR_TestListFile? TestListFileNoNavigation { get; set; } +} diff --git a/Projects/SystemX.Core/SystemX.Core.DB/CPXV2/Tables/HIST_TesterSummary.cs b/Projects/SystemX.Core/SystemX.Core.DB/CPXV2/Tables/HIST_TesterSummary.cs new file mode 100644 index 0000000..7e563e5 --- /dev/null +++ b/Projects/SystemX.Core/SystemX.Core.DB/CPXV2/Tables/HIST_TesterSummary.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; + +namespace SystemX.Core.DB; + +public partial class HIST_TesterSummary +{ + public long No { get; set; } + + public string? StationName { get; set; } + + public string TestType { get; set; } = null!; + + public string Version { get; set; } = null!; + + public string ProdCode { get; set; } = null!; + + public int? TestListFileNo { get; set; } + + public int? TestListVariantNo { get; set; } + + public string? TestListCntID { get; set; } + + public int? StepVersion { get; set; } + + public string HostID { get; set; } = null!; + + public string Section { get; set; } = null!; + + public string ProdNo_C { get; set; } = null!; + + public string ProdNo_P { get; set; } = null!; + + public string Testcode { get; set; } = null!; + + public string TestListFileName { get; set; } = null!; + + public string ProductID { get; set; } = null!; + + public string Result { get; set; } = null!; + + public string Duration { get; set; } = null!; + + public DateTime TestDT { get; set; } +} diff --git a/Projects/SystemX.Core/SystemX.Core.DB/CPXV2/Tables/PROD_Group.cs b/Projects/SystemX.Core/SystemX.Core.DB/CPXV2/Tables/PROD_Group.cs new file mode 100644 index 0000000..142b789 --- /dev/null +++ b/Projects/SystemX.Core/SystemX.Core.DB/CPXV2/Tables/PROD_Group.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; + +namespace SystemX.Core.DB; + +public partial class PROD_Group +{ + public int No { get; set; } + + public string GroupName { get; set; } = null!; + + public string ModelName { get; set; } = null!; + + public string? Comment { get; set; } + + public virtual ICollection PROD_Variants { get; set; } = new List(); +} diff --git a/Projects/SystemX.Core/SystemX.Core.DB/CPXV2/Tables/PROD_Release.cs b/Projects/SystemX.Core/SystemX.Core.DB/CPXV2/Tables/PROD_Release.cs new file mode 100644 index 0000000..d089d72 --- /dev/null +++ b/Projects/SystemX.Core/SystemX.Core.DB/CPXV2/Tables/PROD_Release.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; + +namespace SystemX.Core.DB; + +public partial class PROD_Release +{ + public int No { get; set; } + + public string ProdNo_C { get; set; } = null!; + + public int? TestCodeNo { get; set; } + + public int? VariantNo { get; set; } + + public string Config { get; set; } = null!; + + public DateTime RegDT { get; set; } + + public string RegUser { get; set; } = null!; + + public string? RegUserComment { get; set; } + + public virtual STAT_TestCode? TestCodeNoNavigation { get; set; } + + public virtual PROD_Variant? VariantNoNavigation { get; set; } +} diff --git a/Projects/SystemX.Core/SystemX.Core.DB/CPXV2/Tables/PROD_Variant.cs b/Projects/SystemX.Core/SystemX.Core.DB/CPXV2/Tables/PROD_Variant.cs new file mode 100644 index 0000000..eb9674b --- /dev/null +++ b/Projects/SystemX.Core/SystemX.Core.DB/CPXV2/Tables/PROD_Variant.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; + +namespace SystemX.Core.DB; + +public partial class PROD_Variant +{ + public int No { get; set; } + + public string ProdNo_P { get; set; } = null!; + + public DateTime RegDT { get; set; } + + public string RegUser { get; set; } = null!; + + public DateTime UpdateDT { get; set; } + + public string UpdateUser { get; set; } = null!; + + public int? GroupNo { get; set; } + + public string? Comment { get; set; } + + public string? Description { get; set; } + + public int? TestListFileNo { get; set; } + + public int UseTLPosition { get; set; } + + public bool IsUse { get; set; } + + public virtual PROD_Group? GroupNoNavigation { get; set; } + + public virtual ICollection PROD_Releases { get; set; } = new List(); + + public virtual STOR_TestListFile? TestListFileNoNavigation { get; set; } +} diff --git a/Projects/SystemX.Core/SystemX.Core.DB/CPXV2/Tables/STAT_Host.cs b/Projects/SystemX.Core/SystemX.Core.DB/CPXV2/Tables/STAT_Host.cs new file mode 100644 index 0000000..79a1174 --- /dev/null +++ b/Projects/SystemX.Core/SystemX.Core.DB/CPXV2/Tables/STAT_Host.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; + +namespace SystemX.Core.DB; + +public partial class STAT_Host +{ + public int No { get; set; } + + public string HostID { get; set; } = null!; + + public string Section { get; set; } = null!; + + public string IP { get; set; } = null!; + + public string? TestCode { get; set; } + + public string? Comment { get; set; } + + public DateTime UpdateDT { get; set; } +} diff --git a/Projects/SystemX.Core/SystemX.Core.DB/CPXV2/Tables/STAT_TestCode.cs b/Projects/SystemX.Core/SystemX.Core.DB/CPXV2/Tables/STAT_TestCode.cs new file mode 100644 index 0000000..442adb0 --- /dev/null +++ b/Projects/SystemX.Core/SystemX.Core.DB/CPXV2/Tables/STAT_TestCode.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; + +namespace SystemX.Core.DB; + +public partial class STAT_TestCode +{ + public int No { get; set; } + + public string TestCode { get; set; } = null!; + + public string Gate1 { get; set; } = null!; + + public string Gate2 { get; set; } = null!; + + public string? Comment { get; set; } + + public virtual ICollection PROD_Releases { get; set; } = new List(); +} diff --git a/Projects/SystemX.Core/SystemX.Core.DB/CPXV2/Tables/STAT_User.cs b/Projects/SystemX.Core/SystemX.Core.DB/CPXV2/Tables/STAT_User.cs new file mode 100644 index 0000000..e00e8b8 --- /dev/null +++ b/Projects/SystemX.Core/SystemX.Core.DB/CPXV2/Tables/STAT_User.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; + +namespace SystemX.Core.DB; + +public partial class STAT_User +{ + public int No { get; set; } + + public string UserID { get; set; } = null!; + + public string Name { get; set; } = null!; + + public string Password { get; set; } = null!; + + public string Dept { get; set; } = null!; + + public string Email { get; set; } = null!; + + public string? Comment { get; set; } + + public DateTime UpdateDT { get; set; } +} diff --git a/Projects/SystemX.Core/SystemX.Core.DB/CPXV2/Tables/STOR_TestListFile.cs b/Projects/SystemX.Core/SystemX.Core.DB/CPXV2/Tables/STOR_TestListFile.cs new file mode 100644 index 0000000..42cccd7 --- /dev/null +++ b/Projects/SystemX.Core/SystemX.Core.DB/CPXV2/Tables/STOR_TestListFile.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; + +namespace SystemX.Core.DB; + +public partial class STOR_TestListFile +{ + public int No { get; set; } + + public string Name { get; set; } = null!; + + public string TestType { get; set; } = null!; + + public string Version { get; set; } = null!; + + public string ProdCode { get; set; } = null!; + + public string FileName { get; set; } = null!; + + public DateTime RegDT { get; set; } + + public string RegUser { get; set; } = null!; + + public DateTime UpdateDT { get; set; } + + public string UpdateUser { get; set; } = null!; + + public string? Comment { get; set; } + + public string? Description { get; set; } + + public byte[] TestListData { get; set; } = null!; + + public virtual ICollection HIST_TestListFileLatestStepVersions { get; set; } = new List(); + + public virtual ICollection HIST_TestListFileVariantLists { get; set; } = new List(); + + public virtual ICollection HIST_TestListFiles { get; set; } = new List(); + + public virtual ICollection PROD_Variants { get; set; } = new List(); + + public virtual ICollection VRFY_TestListFileReleases { get; set; } = new List(); +} diff --git a/Projects/SystemX.Core/SystemX.Core.DB/CPXV2/Tables/VRFY_TestListFileRelease.cs b/Projects/SystemX.Core/SystemX.Core.DB/CPXV2/Tables/VRFY_TestListFileRelease.cs new file mode 100644 index 0000000..41699d0 --- /dev/null +++ b/Projects/SystemX.Core/SystemX.Core.DB/CPXV2/Tables/VRFY_TestListFileRelease.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; + +namespace SystemX.Core.DB; + +public partial class VRFY_TestListFileRelease +{ + public long No { get; set; } + + public int? TestListFileNo { get; set; } + + public long StepID { get; set; } + + public string Variant { get; set; } = null!; + + public string Gate { get; set; } = null!; + + public bool? Activate { get; set; } + + public int StepVersion { get; set; } + + public bool? Enable { get; set; } + + public long? Position { get; set; } + + public string? StepDesc { get; set; } + + public string UseFunction { get; set; } = null!; + + public string? MacroParm { get; set; } + + public string? Parm { get; set; } + + public string SpecMin { get; set; } = null!; + + public string SpecMax { get; set; } = null!; + + public bool? IsGlobal { get; set; } + + public string Dim { get; set; } = null!; + + public DateTime UpdateDT { get; set; } + + public virtual STOR_TestListFile? TestListFileNoNavigation { get; set; } +} diff --git a/Projects/SystemX.Core/SystemX.Core.DB/CPXV2Log/Context/CPXV2Log.cs b/Projects/SystemX.Core/SystemX.Core.DB/CPXV2Log/Context/CPXV2Log.cs new file mode 100644 index 0000000..1aeb8b7 --- /dev/null +++ b/Projects/SystemX.Core/SystemX.Core.DB/CPXV2Log/Context/CPXV2Log.cs @@ -0,0 +1,72 @@ +using System; +using System.Collections.Generic; +using Microsoft.EntityFrameworkCore; + +namespace SystemX.Core.DB; + +public partial class CPXV2Log : DbContext +{ + public CPXV2Log(DbContextOptions options) + : base(options) + { + } + + public virtual DbSet HIST_LogSummaries { get; set; } + + public virtual DbSet HIST_TestResults { get; set; } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity(entity => + { + entity.HasKey(e => e.No); + + entity.ToTable("HIST_LogSummary"); + + entity.HasIndex(e => new { e.TestDT, e.No }, "HIST_LogSummary_2"); + + entity.HasIndex(e => e.TestDT, "HIST_LogSummary_3"); + + entity.HasIndex(e => e.No, "UQ__HIST_Log__3214D4A98E941729").IsUnique(); + + entity.Property(e => e.Duration).HasMaxLength(16); + entity.Property(e => e.HostID).HasMaxLength(64); + entity.Property(e => e.ProdCode).HasMaxLength(4); + entity.Property(e => e.ProdNo_C).HasMaxLength(32); + entity.Property(e => e.ProdNo_P).HasMaxLength(32); + entity.Property(e => e.ProductID).HasMaxLength(64); + entity.Property(e => e.Result).HasMaxLength(16); + entity.Property(e => e.Section).HasMaxLength(64); + entity.Property(e => e.StationName) + .HasMaxLength(128) + .HasDefaultValue("-"); + entity.Property(e => e.StepVersion).HasDefaultValue(-1); + entity.Property(e => e.TestDT).HasDefaultValueSql("(getdate())"); + entity.Property(e => e.TestListCntID).HasMaxLength(256); + entity.Property(e => e.TestListFileName).HasMaxLength(256); + entity.Property(e => e.TestListFileNo).HasDefaultValue(-1); + entity.Property(e => e.TestListVariantNo).HasDefaultValue(-1); + entity.Property(e => e.TestType).HasMaxLength(8); + entity.Property(e => e.Testcode).HasMaxLength(16); + entity.Property(e => e.Version).HasMaxLength(4); + }); + + modelBuilder.Entity(entity => + { + entity.HasKey(e => e.No); + + entity.ToTable("HIST_TestResult"); + + entity.HasIndex(e => new { e.TestDT, e.No }, "HIST_TestResult_2"); + + entity.HasIndex(e => e.TestDT, "HIST_TestResult_3"); + + entity.Property(e => e.No).ValueGeneratedNever(); + entity.Property(e => e.TestDT).HasDefaultValueSql("(getdate())"); + }); + + OnModelCreatingPartial(modelBuilder); + } + + partial void OnModelCreatingPartial(ModelBuilder modelBuilder); +} diff --git a/Projects/SystemX.Core/SystemX.Core.DB/CPXV2Log/Tables/HIST_LogSummary.cs b/Projects/SystemX.Core/SystemX.Core.DB/CPXV2Log/Tables/HIST_LogSummary.cs new file mode 100644 index 0000000..a227fbe --- /dev/null +++ b/Projects/SystemX.Core/SystemX.Core.DB/CPXV2Log/Tables/HIST_LogSummary.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; + +namespace SystemX.Core.DB; + +public partial class HIST_LogSummary +{ + public long No { get; set; } + + public string? StationName { get; set; } + + public string TestType { get; set; } = null!; + + public string Version { get; set; } = null!; + + public string ProdCode { get; set; } = null!; + + public int? TestListFileNo { get; set; } + + public int? TestListVariantNo { get; set; } + + public string? TestListCntID { get; set; } + + public int? StepVersion { get; set; } + + public string HostID { get; set; } = null!; + + public string Section { get; set; } = null!; + + public string ProdNo_C { get; set; } = null!; + + public string ProdNo_P { get; set; } = null!; + + public string Testcode { get; set; } = null!; + + public string TestListFileName { get; set; } = null!; + + public string ProductID { get; set; } = null!; + + public string Result { get; set; } = null!; + + public string Duration { get; set; } = null!; + + public DateTime TestDT { get; set; } +} diff --git a/Projects/SystemX.Core/SystemX.Core.DB/CPXV2Log/Tables/HIST_TestResult.cs b/Projects/SystemX.Core/SystemX.Core.DB/CPXV2Log/Tables/HIST_TestResult.cs new file mode 100644 index 0000000..4280676 --- /dev/null +++ b/Projects/SystemX.Core/SystemX.Core.DB/CPXV2Log/Tables/HIST_TestResult.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; + +namespace SystemX.Core.DB; + +public partial class HIST_TestResult +{ + public long No { get; set; } + + public DateTime? TestDT { get; set; } + + public string LogData { get; set; } = null!; +} diff --git a/Projects/SystemX.Core/SystemX.Core.sln b/Projects/SystemX.Core/SystemX.Core.sln index 799e5ae..9c93e32 100644 --- a/Projects/SystemX.Core/SystemX.Core.sln +++ b/Projects/SystemX.Core/SystemX.Core.sln @@ -15,6 +15,10 @@ Project("{00D1A9C2-B5F0-4AF3-8072-F6C62B433612}") = "SystemX.DB.UniqueKeyDB", "D EndProject Project("{00D1A9C2-B5F0-4AF3-8072-F6C62B433612}") = "SystemX.DB.VPKI_DataDB", "DB\SystemX.DB.VPKI_DataDB\SystemX.DB.VPKI_DataDB.sqlproj", "{5D374F06-D9FA-4159-BC84-1F3CA506F50E}" EndProject +Project("{00D1A9C2-B5F0-4AF3-8072-F6C62B433612}") = "SystemX.DB.CPXV2", "DB\SystemX.DB.CPXV2\SystemX.DB.CPXV2.sqlproj", "{3A2D7552-9C12-489F-8A0B-330E000C860D}" +EndProject +Project("{00D1A9C2-B5F0-4AF3-8072-F6C62B433612}") = "SystemX.DB.CPXV2Log", "DB\SystemX.DB.CPXV2Log\SystemX.DB.CPXV2Log.sqlproj", "{D9439C52-76B5-4908-9B0D-43D1F52EC942}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -47,6 +51,18 @@ Global {5D374F06-D9FA-4159-BC84-1F3CA506F50E}.Release|Any CPU.ActiveCfg = Release|Any CPU {5D374F06-D9FA-4159-BC84-1F3CA506F50E}.Release|Any CPU.Build.0 = Release|Any CPU {5D374F06-D9FA-4159-BC84-1F3CA506F50E}.Release|Any CPU.Deploy.0 = Release|Any CPU + {3A2D7552-9C12-489F-8A0B-330E000C860D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3A2D7552-9C12-489F-8A0B-330E000C860D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3A2D7552-9C12-489F-8A0B-330E000C860D}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {3A2D7552-9C12-489F-8A0B-330E000C860D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3A2D7552-9C12-489F-8A0B-330E000C860D}.Release|Any CPU.Build.0 = Release|Any CPU + {3A2D7552-9C12-489F-8A0B-330E000C860D}.Release|Any CPU.Deploy.0 = Release|Any CPU + {D9439C52-76B5-4908-9B0D-43D1F52EC942}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D9439C52-76B5-4908-9B0D-43D1F52EC942}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D9439C52-76B5-4908-9B0D-43D1F52EC942}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {D9439C52-76B5-4908-9B0D-43D1F52EC942}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D9439C52-76B5-4908-9B0D-43D1F52EC942}.Release|Any CPU.Build.0 = Release|Any CPU + {D9439C52-76B5-4908-9B0D-43D1F52EC942}.Release|Any CPU.Deploy.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -55,6 +71,8 @@ Global {B44C85FA-BD31-419F-8481-477E166A5753} = {C8D5274F-AC00-46C7-1F8D-E88E81087A52} {C67F3F97-1D52-4C75-A04F-16ED41822CCD} = {C8D5274F-AC00-46C7-1F8D-E88E81087A52} {5D374F06-D9FA-4159-BC84-1F3CA506F50E} = {C8D5274F-AC00-46C7-1F8D-E88E81087A52} + {3A2D7552-9C12-489F-8A0B-330E000C860D} = {C8D5274F-AC00-46C7-1F8D-E88E81087A52} + {D9439C52-76B5-4908-9B0D-43D1F52EC942} = {C8D5274F-AC00-46C7-1F8D-E88E81087A52} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {A26A3BD0-2161-41FA-949A-DEA966E8F798}