From e1a05440c1bb70d834bcf561ba88ac3d46239090 Mon Sep 17 00:00:00 2001 From: gsfbuildbot Date: Thu, 30 Nov 2023 10:34:47 -0500 Subject: [PATCH] Updated GSF dependencies. --- Source/Data/MySQL/InitialDataSet.sql | 2 + Source/Data/MySQL/openHistorian.sql | 33 ++++++++++++ Source/Data/Oracle/InitialDataSet.sql | 2 + Source/Data/Oracle/openHistorian.sql | 45 ++++++++++++++++ Source/Data/PostgreSQL/InitialDataSet.sql | 2 + Source/Data/PostgreSQL/openHistorian.sql | 32 +++++++++++ Source/Data/SQL Server/InitialDataSet.sql | 5 ++ Source/Data/SQL Server/openHistorian.sql | 50 ++++++++++++++++++ Source/Data/SQLite/InitialDataSet.sql | 3 ++ .../SQLite/openHistorian-InitialDataSet.db | Bin 458752 -> 458752 bytes .../SQLite/openHistorian-SampleDataSet.db | Bin 466944 -> 466944 bytes Source/Data/SQLite/openHistorian.db | Bin 417792 -> 417792 bytes Source/Data/SQLite/openHistorian.sql | 21 ++++++++ Source/Data/SerializedSchema.bin | Bin 162881 -> 162881 bytes 14 files changed, 195 insertions(+) diff --git a/Source/Data/MySQL/InitialDataSet.sql b/Source/Data/MySQL/InitialDataSet.sql index 025017f007..bca0b2b8ee 100755 --- a/Source/Data/MySQL/InitialDataSet.sql +++ b/Source/Data/MySQL/InitialDataSet.sql @@ -254,4 +254,6 @@ INSERT INTO AlarmState (State, Color) VALUES ('Bad Time', 'purple'); INSERT INTO AlarmState (State, Color) VALUES ('Out of Service', 'grey'); INSERT INTO AlarmState (State, Color) VALUES ('Acknowledged', 'rosybrown'); INSERT INTO Protocol(Acronym, Name, Type, Category, AssemblyName, TypeName, LoadOrder) VALUES('COMTRADE', 'COMTRADE Import', 'Measurement', 'Imported', 'TestingAdapters.dll', 'TestingAdapters.VirtualInputAdapter', 15); +INSERT INTO ConfigurationEntity(SourceName, RuntimeName, Description, LoadOrder, Enabled) VALUES('NodeCompressionSetting', 'CompressionSettings', 'Defines information about measurement compression settings', 19, 1); +INSERT INTO Protocol(Acronym, Name, Type, Category, AssemblyName, TypeName, LoadOrder) VALUES('COMTRADE', 'COMTRADE Import', 'Measurement', 'Imported', 'TestingAdapters.dll', 'TestingAdapters.VirtualInputAdapter', 15); INSERT INTO ConfigurationEntity(SourceName, RuntimeName, Description, LoadOrder, Enabled) VALUES('NodeCompressionSetting', 'CompressionSettings', 'Defines information about measurement compression settings', 19, 1); \ No newline at end of file diff --git a/Source/Data/MySQL/openHistorian.sql b/Source/Data/MySQL/openHistorian.sql index e6f6c198ea..cb7d946216 100755 --- a/Source/Data/MySQL/openHistorian.sql +++ b/Source/Data/MySQL/openHistorian.sql @@ -1899,3 +1899,36 @@ CREATE TABLE EventMarker( Notes VARCHAR(max) NULL, CONSTRAINT FK_EventMarker_EventMarker FOREIGN KEY(ParentID) REFERENCES EventMarker (ID) ON DELETE CASCADE ON UPDATE CASCADE ); + +-- ******************************************************************************************* +-- IMPORTANT NOTE: When making updates to this schema, please increment the version number! +-- ******************************************************************************************* +CREATE VIEW LocalSchemaVersion AS +SELECT 1 AS VersionNumber; + +CREATE TABLE CompressionSetting( + PointID INT NOT NULL, + CompressionMinTime BIGINT NOT NULL DEFAULT 0, + CompressionMaxTime BIGINT NOT NULL DEFAULT 0, + CompressionLimit DOUBLE NOT NULL DEFAULT 0.0, + CONSTRAINT PK_CompressionSetting PRIMARY KEY (PointID ASC) +); + +CREATE VIEW NodeCompressionSetting AS +SELECT + Node.ID AS NodeID, + CompressionSetting.PointID, + CompressionSetting.CompressionMinTime, + CompressionSetting.CompressionMaxTime, + CompressionSetting.CompressionLimit +FROM CompressionSetting CROSS JOIN Node; + +CREATE TABLE EventMarker( + ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, + ParentID INTEGER NULL, + Source VARCHAR(200) NULL, + StartTime DATETIME NULL, + StopTime DATETIME NULL, + Notes VARCHAR(max) NULL, + CONSTRAINT FK_EventMarker_EventMarker FOREIGN KEY(ParentID) REFERENCES EventMarker (ID) ON DELETE CASCADE ON UPDATE CASCADE +); diff --git a/Source/Data/Oracle/InitialDataSet.sql b/Source/Data/Oracle/InitialDataSet.sql index ca14af8fa1..726303bcf8 100755 --- a/Source/Data/Oracle/InitialDataSet.sql +++ b/Source/Data/Oracle/InitialDataSet.sql @@ -252,4 +252,6 @@ INSERT INTO AlarmState (State, Color) VALUES ('Bad Time', 'purple'); INSERT INTO AlarmState (State, Color) VALUES ('Out of Service', 'grey'); INSERT INTO AlarmState (State, Color) VALUES ('Acknowledged', 'rosybrown'); INSERT INTO Protocol(Acronym, Name, Type, Category, AssemblyName, TypeName, LoadOrder) VALUES('COMTRADE', 'COMTRADE Import', 'Measurement', 'Imported', 'TestingAdapters.dll', 'TestingAdapters.VirtualInputAdapter', 15); +INSERT INTO ConfigurationEntity(SourceName, RuntimeName, Description, LoadOrder, Enabled) VALUES('NodeCompressionSetting', 'CompressionSettings', 'Defines information about measurement compression settings', 19, 1); +INSERT INTO Protocol(Acronym, Name, Type, Category, AssemblyName, TypeName, LoadOrder) VALUES('COMTRADE', 'COMTRADE Import', 'Measurement', 'Imported', 'TestingAdapters.dll', 'TestingAdapters.VirtualInputAdapter', 15); INSERT INTO ConfigurationEntity(SourceName, RuntimeName, Description, LoadOrder, Enabled) VALUES('NodeCompressionSetting', 'CompressionSettings', 'Defines information about measurement compression settings', 19, 1); \ No newline at end of file diff --git a/Source/Data/Oracle/openHistorian.sql b/Source/Data/Oracle/openHistorian.sql index c36b802257..8e03ab1283 100755 --- a/Source/Data/Oracle/openHistorian.sql +++ b/Source/Data/Oracle/openHistorian.sql @@ -2858,3 +2858,48 @@ CREATE TRIGGER AI_EventMarker BEFORE INSERT ON EventMarker FOR EACH ROW BEGIN SELECT SEQ_EventMarker.nextval INTO :NEW.ID FROM dual; END; + +-- ******************************************************************************************* +-- IMPORTANT NOTE: When making updates to this schema, please increment the version number! +-- ******************************************************************************************* +CREATE VIEW LocalSchemaVersion AS +SELECT 1 AS VersionNumber +FROM dual; + +CREATE TABLE CompressionSetting( + PointID NUMBER NOT NULL, + CompressionMinTime NUMBER(19, 0) DEFAULT 0 NOT NULL, + CompressionMaxTime NUMBER(19, 0) DEFAULT 0 NOT NULL, + CompressionLimit NUMBER(9, 6) DEFAULT 0.0 NOT NULL +); + +CREATE UNIQUE INDEX IX_CompressionSetting_PointID ON CompressionSetting (PointID ASC) TABLESPACE openHistorian_INDEX; + +CREATE VIEW NodeCompressionSetting AS +SELECT + Node.ID AS NodeID, + CompressionSetting.PointID, + CompressionSetting.CompressionMinTime, + CompressionSetting.CompressionMaxTime, + CompressionSetting.CompressionLimit +FROM CompressionSetting CROSS JOIN Node; + +CREATE TABLE EventMarker( + ID NUMBER NOT NULL, + ParentID Number NULL, + Source VARCHAR2(200) NULL, + StartTime DATE NULL, + StopTime DATE NULL, + Notes VARCHAR2(4000) NULL +); + +CREATE UNIQUE INDEX IX_EventMarker_ID ON EventMarker (ID ASC) TABLESPACE openHistorian_INDEX; + +ALTER TABLE EventMarker ADD CONSTRAINT PK_EventMarker PRIMARY KEY (ID); + +CREATE SEQUENCE SEQ_EventMarker START WITH 1 INCREMENT BY 1; + +CREATE TRIGGER AI_EventMarker BEFORE INSERT ON EventMarker + FOR EACH ROW BEGIN SELECT SEQ_EventMarker.nextval INTO :NEW.ID FROM dual; +END; + diff --git a/Source/Data/PostgreSQL/InitialDataSet.sql b/Source/Data/PostgreSQL/InitialDataSet.sql index de6456eb51..29bcce11f1 100644 --- a/Source/Data/PostgreSQL/InitialDataSet.sql +++ b/Source/Data/PostgreSQL/InitialDataSet.sql @@ -252,4 +252,6 @@ INSERT INTO AlarmState (State, Color) VALUES ('Bad Time', 'purple'); INSERT INTO AlarmState (State, Color) VALUES ('Out of Service', 'grey'); INSERT INTO AlarmState (State, Color) VALUES ('Acknowledged', 'rosybrown'); INSERT INTO Protocol(Acronym, Name, Type, Category, AssemblyName, TypeName, LoadOrder) VALUES('COMTRADE', 'COMTRADE Import', 'Measurement', 'Imported', 'TestingAdapters.dll', 'TestingAdapters.VirtualInputAdapter', 15); +INSERT INTO ConfigurationEntity(SourceName, RuntimeName, Description, LoadOrder, Enabled) VALUES('NodeCompressionSetting', 'CompressionSettings', 'Defines information about measurement compression settings', 19, 1); +INSERT INTO Protocol(Acronym, Name, Type, Category, AssemblyName, TypeName, LoadOrder) VALUES('COMTRADE', 'COMTRADE Import', 'Measurement', 'Imported', 'TestingAdapters.dll', 'TestingAdapters.VirtualInputAdapter', 15); INSERT INTO ConfigurationEntity(SourceName, RuntimeName, Description, LoadOrder, Enabled) VALUES('NodeCompressionSetting', 'CompressionSettings', 'Defines information about measurement compression settings', 19, 1); \ No newline at end of file diff --git a/Source/Data/PostgreSQL/openHistorian.sql b/Source/Data/PostgreSQL/openHistorian.sql index 951050673f..a21e79c000 100644 --- a/Source/Data/PostgreSQL/openHistorian.sql +++ b/Source/Data/PostgreSQL/openHistorian.sql @@ -1928,3 +1928,35 @@ CREATE TABLE EventMarker( Notes VARCHAR(max) NULL, CONSTRAINT FK_EventMarker_EventMarker FOREIGN KEY(ParentID) REFERENCES EventMarker (ID) ON DELETE CASCADE ON UPDATE CASCADE ); + +-- ******************************************************************************************* +-- IMPORTANT NOTE: When making updates to this schema, please increment the version number! +-- ******************************************************************************************* +CREATE VIEW LocalSchemaVersion AS +SELECT 1 AS VersionNumber; + +CREATE TABLE CompressionSetting( + PointID INTEGER NOT NULL PRIMARY KEY, + CompressionMinTime BIGINT NOT NULL DEFAULT 0, + CompressionMaxTime BIGINT NOT NULL DEFAULT 0, + CompressionLimit DOUBLE PRECISION NOT NULL DEFAULT 0.0 +); + +CREATE VIEW NodeCompressionSetting AS +SELECT + Node.ID AS NodeID, + CompressionSetting.PointID, + CompressionSetting.CompressionMinTime, + CompressionSetting.CompressionMaxTime, + CompressionSetting.CompressionLimit +FROM CompressionSetting CROSS JOIN Node; + +CREATE TABLE EventMarker( + ID SERIAL NOT NULL PRIMARY KEY, + ParentID INTEGER NULL, + Source VARCHAR(200) NULL, + StartTime TIMESTAMP NULL, + StopTime TIMESTAMP NULL, + Notes VARCHAR(max) NULL, + CONSTRAINT FK_EventMarker_EventMarker FOREIGN KEY(ParentID) REFERENCES EventMarker (ID) ON DELETE CASCADE ON UPDATE CASCADE +); diff --git a/Source/Data/SQL Server/InitialDataSet.sql b/Source/Data/SQL Server/InitialDataSet.sql index c792cf518f..c2f0f2417d 100755 --- a/Source/Data/SQL Server/InitialDataSet.sql +++ b/Source/Data/SQL Server/InitialDataSet.sql @@ -759,5 +759,10 @@ GO INSERT INTO Protocol(Acronym, Name, Type, Category, AssemblyName, TypeName, LoadOrder) VALUES('COMTRADE', 'COMTRADE Import', 'Measurement', 'Imported', 'TestingAdapters.dll', 'TestingAdapters.VirtualInputAdapter', 15) GO +INSERT INTO ConfigurationEntity(SourceName, RuntimeName, Description, LoadOrder, Enabled) VALUES('NodeCompressionSetting', 'CompressionSettings', 'Defines information about measurement compression settings', 19, 1) +GO +INSERT INTO Protocol(Acronym, Name, Type, Category, AssemblyName, TypeName, LoadOrder) VALUES('COMTRADE', 'COMTRADE Import', 'Measurement', 'Imported', 'TestingAdapters.dll', 'TestingAdapters.VirtualInputAdapter', 15) +GO + INSERT INTO ConfigurationEntity(SourceName, RuntimeName, Description, LoadOrder, Enabled) VALUES('NodeCompressionSetting', 'CompressionSettings', 'Defines information about measurement compression settings', 19, 1) GO \ No newline at end of file diff --git a/Source/Data/SQL Server/openHistorian.sql b/Source/Data/SQL Server/openHistorian.sql index d6a725ef4f..01d3daea27 100755 --- a/Source/Data/SQL Server/openHistorian.sql +++ b/Source/Data/SQL Server/openHistorian.sql @@ -3184,6 +3184,56 @@ FROM CompressionSetting CROSS JOIN Node GO +CREATE TABLE [dbo].[EventMarker]( + [ID] [int] IDENTITY(1,1) NOT NULL, + [ParentID] [int] NULL, + [Source] [varchar](200) NULL, + [StartTime] [datetime] NULL, + [StopTime] [datetime] NULL, + [Notes] [varchar](max) NULL, + CONSTRAINT [PK_EventMarker] PRIMARY KEY CLUSTERED + ( [ID] ASC ) WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] +) +ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] +GO + +ALTER TABLE [dbo].[EventMarker] WITH CHECK ADD CONSTRAINT [FK_EventMarker_EventMarker] FOREIGN KEY([ParentID]) +REFERENCES [dbo].[EventMarker] ([ID]) +GO +-- ******************************************************************************************* +-- IMPORTANT NOTE: When making updates to this schema, please increment the version number! +-- ******************************************************************************************* +CREATE VIEW [dbo].[LocalSchemaVersion] AS +SELECT 1 AS VersionNumber +GO + +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +CREATE TABLE [dbo].[CompressionSetting]( + [PointID] [int] NOT NULL, + [CompressionMinTime] [bigint] NOT NULL DEFAULT ((0)), + [CompressionMaxTime] [bigint] NOT NULL DEFAULT ((0)), + [CompressionLimit] [float] NOT NULL DEFAULT ((0.0)), + CONSTRAINT [PK_CompressionSetting] PRIMARY KEY CLUSTERED +( + [PointID] ASC +)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] +) ON [PRIMARY] +GO + +CREATE VIEW NodeCompressionSetting AS +SELECT + Node.ID AS NodeID, + CompressionSetting.PointID, + CompressionSetting.CompressionMinTime, + CompressionSetting.CompressionMaxTime, + CompressionSetting.CompressionLimit +FROM CompressionSetting CROSS JOIN Node +GO + + CREATE TABLE [dbo].[EventMarker]( [ID] [int] IDENTITY(1,1) NOT NULL, [ParentID] [int] NULL, diff --git a/Source/Data/SQLite/InitialDataSet.sql b/Source/Data/SQLite/InitialDataSet.sql index f2a67c6f2f..f71286222a 100755 --- a/Source/Data/SQLite/InitialDataSet.sql +++ b/Source/Data/SQLite/InitialDataSet.sql @@ -255,3 +255,6 @@ INSERT INTO AlarmState (State, Color) VALUES ('Out of Service', 'grey'); INSERT INTO AlarmState (State, Color) VALUES ('Acknowledged', 'rosybrown'); INSERT INTO Protocol(Acronym, Name, Type, Category, AssemblyName, TypeName, LoadOrder) VALUES('COMTRADE', 'COMTRADE Import', 'Measurement', 'Imported', 'TestingAdapters.dll', 'TestingAdapters.VirtualInputAdapter', 15); INSERT INTO ConfigurationEntity(SourceName, RuntimeName, Description, LoadOrder, Enabled) VALUES('NodeCompressionSetting', 'CompressionSettings', 'Defines information about measurement compression settings', 19, 1); + +INSERT INTO Protocol(Acronym, Name, Type, Category, AssemblyName, TypeName, LoadOrder) VALUES('COMTRADE', 'COMTRADE Import', 'Measurement', 'Imported', 'TestingAdapters.dll', 'TestingAdapters.VirtualInputAdapter', 15); +INSERT INTO ConfigurationEntity(SourceName, RuntimeName, Description, LoadOrder, Enabled) VALUES('NodeCompressionSetting', 'CompressionSettings', 'Defines information about measurement compression settings', 19, 1); diff --git a/Source/Data/SQLite/openHistorian-InitialDataSet.db b/Source/Data/SQLite/openHistorian-InitialDataSet.db index 5a404f84be8b283af33c14e2f35e9db4377cd24f..f851d01c774dc4f65e5c2db5d38aa5047fb99fa8 100755 GIT binary patch delta 5946 zcmeI0O=w+36vs2K>3fNgnglC?!G3AdsF}>%xu3OFQN)5GVoP?Ag6GhP|MP3`|Mg-B?Raaef<<3RX?iB4tsOR2?_RYCx>+WrT{5ki`f6knl zb1RjeN~Pz$yG8B&o?W5m=gDh~evDL$c7uXT=6uM|=`k1tF(J3_~OLk-$nNtXRR> zk$sL<$;9ZqHpS36>N!a$87n4<3`2R;5OL%)t5Xs&{51Li5r-jTvXY45t}z-pRLt(7 zSQ&VA%-udE17C6LLkyS4Xc~SLb7I7>ZG11u+1G5&h~cfA*o4fMD2W)Zjr(Lz4DYj1 z@Yn?16OXqUF|15TlCtJ)Mhw4CP%|`dGh%pR(ydP=mB*Ta7(SgGXk4F8Wa8&fNrvIi zNoTWDsPg+)$MEcwYFr=E*zx}2Y-{psi*yF83 z3?nlk5pz8e(@1;b_cL^XTu)5JXx*0Ch(zX^B8t|)-7>4F{I<+6mC}HY3#qiY}O_?paI4imva|ubAEjkpVb1xir4@#U? zSN@=67;1-In`7zo&LM`|=eLtIxUPt1q+Rj(`F>)CF-#+fr7`g3ywk`r0$Xz}EiID+ z=Q~?FH*GClg;J%zP`bL&)%kg;eP(MZF>eadZs&It@3fb87Q5ld;@+n2n1VhR-}itWaLQ2-6r|2p5Ui zmr2N2kzwdtb-h5!nVey$uI_iz@MRn^#$_1(TJ?GxUV{dyVzv)4JhSHXJ(Na1V_Syd z?An8aZrl*BF8U(H7>GNt#=F{%LFtnng|=f@+y~kU0 zMDp;X{Kbut5!)+^;zg?FY5~Hn)FvA@i;?bMisx?uq6{@vO)mrO?+U6f?jUQ`{l((kq=1AG_t3hE`%HN1y zhMOa0{dbI#&5`ooe^WTUG)Kz+dI`GG94T+PkxiP-kuvKV|KCWNO_~>8E>^ZQK0fe< z=ce&Gw(D;c-5+A8X8r-CYUA71g`zV;BIf4tI<~_LMdxXqV*dYbpzJpb#rsLx+(3>o K5PwlAR{jB>xeB)c delta 5903 zcmeI0O=w(I6vuPZbQ*-#N$o-~*lIOt)ZE;A-?v&7i&#)Zv{n}ilka3EX+$>##SDm( zv}yf1$Q6?&ilC{KFzrA$BKT2Vb)zd6?pzdgr)W1qJ?}j~=AL)9?gnP{TWp=L)J8yWIKN0($;lzmHlTnX&;RQY?_5$b`^NC@TXike5Dr2`3!^R}6*uc55 zgG8$X*02tsJZ^{+iVquNsE&J7%*Rb(+`b;a(-CVKM@*123^z`=mXWHcc)Se5ixckk zX&G^`$S_=Y- z&tttn3~N)8xNIWUFk<+1iUva`tYyUT(6pPMTBb=O47@nIwNZbfxrVA*E7`~i6 zK*fsb0w`8K?5++Fao{u6sw85lRELPz57`4EhV#|^RIFIbzS8h#^*$nIlTM|%2xGO7 zh>d35Kn$PP=mFVwq$Fb4H5U=fY(G*m?ML%-j%Ag|Bq}z=9K)w`gYA}6%2Z&E;ktRJ zs*uJ^3Fa6o^S8F=KGG;G7D|TU>^yau%OljLd31F?AugwtO)D@J8wJlCa|#7%z*Jz4 zp?S;+Gg2;(atzlm>?3Y?OeaS%Vt9IChy=r9I(aHq@bQAv$PsdBq`JDgriU+-d&=AP z^d5p8^`TZ@`G(%^+8+3Rsn%*Pf7{pok0z2PEViBu!{&QI`%zNJRA!E0`|2Y^to>rm zqZlz9Up+#+P)uc_ScUN0suO(^%7p1@Iff_JoRUu|)6;ScAFhRt7om)qo`&MsfBTG+ zT*xA(qvaSz&)nmL0>xb1G7Ogr;*g75C=tWpI*moZ#VwSGp|O6LxDhZN4Shxof2^B< zwkZ#(&tzhX;js;;pCR*@i6X~vZsV>I*RJu3-whNa-if(e?)?dNynhQO?H9e>)iNw@ zR$EV(}V4%LY5XALn<)tV^?RO`qdUJ?UN%EZ!VMpm@# z2lkyMag>O?gei$wdWqe=EZ!x4c+6J@($%Oe-VBsUS53h*hM9mgxl-8}ivLaq4 z>WFV`i0#TL@hDM;%=C($Ahy>|kq9DY#@AGBLc4HU93i#?W@bY*V*AT!F+uc>FkMZA1PdHaDD9TiP_8S z|F*K}eOZ8pt!-w|Lw}QgfoMXHBO38iYGVB`yjtTg*V0#uz&i;s)ePGJ49bGIr eqcy78hsqS&t;NzEj@t$|0_L?Q!yna4^}hfscm0F_ diff --git a/Source/Data/SQLite/openHistorian-SampleDataSet.db b/Source/Data/SQLite/openHistorian-SampleDataSet.db index 026697ff105f65f037576ad5d5ffec8890860444..8de5af830466957dadcbcb878fad547f2605371d 100755 GIT binary patch delta 12541 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 Wdmq< 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