diff Data/Create Scripts/Firebird2.sql @ 0:f990fcb411a9

Копия текущей версии из github
author cin
date Thu, 27 Mar 2014 21:46:09 +0400
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Data/Create Scripts/Firebird2.sql	Thu Mar 27 21:46:09 2014 +0400
@@ -0,0 +1,598 @@
+DROP PROCEDURE Person_SelectByKey;            COMMIT;
+DROP PROCEDURE Person_SelectAll;              COMMIT;
+DROP PROCEDURE Person_SelectByName;           COMMIT;
+DROP PROCEDURE Person_Insert;                 COMMIT;
+DROP PROCEDURE Person_Insert_OutputParameter; COMMIT;
+DROP PROCEDURE Person_Update;                 COMMIT;
+DROP PROCEDURE Person_Delete;                 COMMIT;
+DROP PROCEDURE Patient_SelectAll;             COMMIT;
+DROP PROCEDURE Patient_SelectByName;          COMMIT;
+DROP PROCEDURE OutRefTest;                    COMMIT;
+DROP PROCEDURE OutRefEnumTest;                COMMIT;
+DROP PROCEDURE Scalar_DataReader;             COMMIT;
+DROP PROCEDURE Scalar_OutputParameter;        COMMIT;
+DROP PROCEDURE Scalar_ReturnParameter;        COMMIT;
+
+DROP TRIGGER CREATE_BinaryDataID;             COMMIT;
+DROP TRIGGER CHANGE_BinaryData;               COMMIT;
+DROP TRIGGER CREATE_PersonID;                 COMMIT;
+DROP TRIGGER CREATE_DataTypeTest;             COMMIT;
+
+DROP GENERATOR DataTypeID;                    COMMIT;
+DROP GENERATOR PersonID;                      COMMIT;
+DROP GENERATOR TimestampGen;                  COMMIT;
+
+DROP VIEW PersonView;                         COMMIT;
+
+DROP TABLE Dual;                              COMMIT;
+DROP TABLE DataTypeTest;                      COMMIT;
+DROP TABLE BinaryData;                        COMMIT;
+DROP TABLE Doctor;                            COMMIT;
+DROP TABLE Patient;                           COMMIT;
+DROP TABLE Person;                            COMMIT;
+
+DROP EXTERNAL FUNCTION rtrim;                 COMMIT;
+DROP EXTERNAL FUNCTION ltrim;                 COMMIT;
+
+
+DECLARE EXTERNAL FUNCTION ltrim 
+	CSTRING(255) NULL
+	RETURNS CSTRING(255) FREE_IT
+	ENTRY_POINT 'IB_UDF_ltrim' MODULE_NAME 'ib_udf';
+COMMIT;
+
+DECLARE EXTERNAL FUNCTION rtrim 
+	CSTRING(255) NULL
+	RETURNS CSTRING(255) FREE_IT
+	ENTRY_POINT 'IB_UDF_rtrim' MODULE_NAME 'ib_udf';
+COMMIT;
+
+
+/*
+Dual table FOR supporting queryies LIKE:
+SELECT 1 AS id => SELECT 1 AS "id" *FROM Dual*
+*/
+CREATE TABLE Dual (Dummy  VARCHAR(10));
+COMMIT;
+INSERT INTO  Dual (Dummy) VALUES ('X');
+COMMIT;
+
+-- Person Table
+
+CREATE TABLE Person
+(
+	PersonID   INTEGER     NOT NULL  PRIMARY KEY,
+	FirstName  VARCHAR(50) CHARACTER SET UNICODE_FSS NOT NULL,
+	LastName   VARCHAR(50) CHARACTER SET UNICODE_FSS NOT NULL,
+	MiddleName VARCHAR(50),
+	Gender     CHAR(1)     NOT NULL CHECK (Gender in ('M', 'F', 'U', 'O'))
+); 
+COMMIT;
+
+CREATE GENERATOR PersonID;
+COMMIT;
+
+CREATE GENERATOR TimestampGen;
+COMMIT;
+
+CREATE TRIGGER CREATE_PersonID FOR Person
+BEFORE INSERT POSITION 0
+AS BEGIN
+	NEW.PersonID = GEN_ID(PersonID, 1);
+END
+COMMIT;
+
+INSERT INTO Person (FirstName, LastName, Gender) VALUES ('John',   'Pupkin',    'M');
+COMMIT;
+INSERT INTO Person (FirstName, LastName, Gender) VALUES ('Tester', 'Testerson', 'M');
+COMMIT;
+
+-- Doctor Table Extension
+
+CREATE TABLE Doctor
+(
+	PersonID INTEGER     NOT NULL,
+	Taxonomy VARCHAR(50) NOT NULL,
+		FOREIGN KEY (PersonID) REFERENCES Person (PersonID)
+			ON DELETE CASCADE
+)
+COMMIT;
+
+INSERT INTO Doctor (PersonID, Taxonomy) VALUES (1, 'Psychiatry');
+COMMIT;
+
+-- Patient Table Extension
+
+CREATE TABLE Patient
+(
+	PersonID  int           NOT NULL,
+	Diagnosis VARCHAR(256)  NOT NULL,
+	FOREIGN KEY (PersonID) REFERENCES Person (PersonID)
+			ON DELETE CASCADE
+);
+COMMIT;
+
+INSERT INTO Patient (PersonID, Diagnosis) VALUES (2, 'Hallucination with Paranoid Bugs'' Delirium of Persecution');
+COMMIT;
+
+-- Person_SelectByKey
+
+CREATE PROCEDURE Person_SelectByKey(id INTEGER)
+RETURNS (
+	PersonID   INTEGER,
+	FirstName  VARCHAR(50),
+	LastName   VARCHAR(50),
+	MiddleName VARCHAR(50),
+	Gender     CHAR(1)
+	)
+AS
+BEGIN
+	SELECT PersonID, FirstName, LastName, MiddleName, Gender FROM Person 
+	WHERE PersonID = :id
+	INTO
+		:PersonID,
+		:FirstName,
+		:LastName,
+		:MiddleName,
+		:Gender;
+	SUSPEND;
+END
+COMMIT;
+
+-- Person_SelectAll
+
+CREATE PROCEDURE Person_SelectAll
+RETURNS (
+	PersonID   INTEGER,
+	FirstName  VARCHAR(50),
+	LastName   VARCHAR(50),
+	MiddleName VARCHAR(50),
+	Gender     CHAR(1)
+	)
+AS
+BEGIN
+	FOR 
+		SELECT PersonID, FirstName, LastName, MiddleName, Gender FROM Person 
+		INTO
+			:PersonID,
+			:FirstName,
+			:LastName,
+			:MiddleName,
+			:Gender
+	DO SUSPEND;
+END
+COMMIT;
+
+-- Person_SelectByName
+
+CREATE PROCEDURE Person_SelectByName (
+	in_FirstName VARCHAR(50),
+	in_LastName  VARCHAR(50)
+	)
+RETURNS (
+	PersonID   int,
+	FirstName  VARCHAR(50),
+	LastName   VARCHAR(50),
+	MiddleName VARCHAR(50),
+	Gender     CHAR(1)
+	)
+AS
+BEGIN
+
+	FOR SELECT PersonID, FirstName, LastName, MiddleName, Gender FROM Person 
+		WHERE FirstName LIKE :in_FirstName and LastName LIKE :in_LastName
+	INTO
+		:PersonID,   
+		:FirstName,  
+		:LastName,   
+		:MiddleName, 
+		:Gender 
+	DO SUSPEND;
+END
+COMMIT;
+
+-- Person_Insert
+
+CREATE PROCEDURE Person_Insert(
+	FirstName  VARCHAR(50),
+	LastName   VARCHAR(50),
+	MiddleName VARCHAR(50),
+	Gender     CHAR(1)
+	)
+RETURNS (PersonID INTEGER)
+AS
+BEGIN
+	INSERT INTO Person
+		( LastName,  FirstName,  MiddleName,  Gender)
+	VALUES
+		(:LastName, :FirstName, :MiddleName, :Gender);
+
+	SELECT MAX(PersonID) FROM person
+		INTO :PersonID;
+	SUSPEND;
+END
+COMMIT;
+
+-- Person_Insert_OutputParameter
+
+CREATE PROCEDURE Person_Insert_OutputParameter(
+	FirstName  VARCHAR(50),
+	LastName   VARCHAR(50),
+	MiddleName VARCHAR(50),
+	Gender     CHAR(1)
+	)
+RETURNS (PersonID INTEGER)
+AS
+BEGIN
+	INSERT INTO Person
+		( LastName,  FirstName,  MiddleName,  Gender)
+	VALUES
+		(:LastName, :FirstName, :MiddleName, :Gender);
+
+	SELECT max(PersonID) FROM person
+	INTO :PersonID;
+	SUSPEND;
+END
+COMMIT;
+
+-- Person_Update
+
+CREATE PROCEDURE Person_Update(
+	PersonID   INTEGER,
+	FirstName  VARCHAR(50),
+	LastName   VARCHAR(50),
+	MiddleName VARCHAR(50),
+	Gender     CHAR(1)
+	)
+AS
+BEGIN
+	UPDATE
+		Person
+	SET
+		LastName   = :LastName,
+		FirstName  = :FirstName,
+		MiddleName = :MiddleName,
+		Gender     = :Gender
+	WHERE
+		PersonID = :PersonID;
+END
+COMMIT;
+
+-- Person_Delete
+
+CREATE PROCEDURE Person_Delete(
+	PersonID INTEGER
+	)
+AS
+BEGIN
+	DELETE FROM Person WHERE PersonID = :PersonID;
+END
+COMMIT;
+
+-- Patient_SelectAll
+
+CREATE PROCEDURE Patient_SelectAll
+RETURNS (
+	PersonID   int,
+	FirstName  VARCHAR(50),
+	LastName   VARCHAR(50),
+	MiddleName VARCHAR(50),
+	Gender     CHAR(1),
+	Diagnosis  VARCHAR(256)
+	)
+AS
+BEGIN
+	FOR 
+		SELECT
+			Person.PersonID,
+			FirstName,
+			LastName,
+			MiddleName,
+			Gender,
+			Patient.Diagnosis
+		FROM
+			Patient, Person
+		WHERE
+			Patient.PersonID = Person.PersonID
+		INTO
+			:PersonID,
+			:FirstName,
+			:LastName,
+			:MiddleName,
+			:Gender,
+			:Diagnosis
+	DO SUSPEND;
+END
+COMMIT;
+
+-- Patient_SelectByName
+
+CREATE PROCEDURE Patient_SelectByName(
+	FirstName VARCHAR(50),
+	LastName  VARCHAR(50)
+	)
+RETURNS (
+	PersonID   int,
+	MiddleName VARCHAR(50),
+	Gender     CHAR(1),
+	Diagnosis  VARCHAR(256)
+	)
+AS
+BEGIN
+	FOR 
+		SELECT
+			Person.PersonID, 
+			MiddleName,
+			Gender,
+			Patient.Diagnosis
+		FROM
+			Patient, Person
+		WHERE
+			Patient.PersonID = Person.PersonID
+			and FirstName = :FirstName and LastName = :LastName
+		INTO
+			:PersonID,   
+			:MiddleName, 
+			:Gender,
+			:Diagnosis
+	DO SUSPEND;
+END
+COMMIT;
+
+-- BinaryData Table
+
+CREATE TABLE BinaryData
+(
+	BinaryDataID INTEGER       NOT NULL PRIMARY KEY,
+	Stamp        INTEGER       NOT NULL,
+	Data         BLOB          NOT NULL
+);
+COMMIT;
+
+CREATE TRIGGER CREATE_BinaryDataID FOR BinaryData
+BEFORE INSERT POSITION 0
+AS BEGIN
+	NEW.BinaryDataID = GEN_ID(PersonID, 1); 
+	NEW.Stamp = GEN_ID(TimestampGen, 1);
+END
+COMMIT;
+
+CREATE TRIGGER CHANGE_BinaryData FOR BinaryData
+beFORe update 
+AS BEGIN
+	NEW.Stamp = GEN_ID(TimestampGen, 1);
+END
+COMMIT;
+
+-- OutRefTest
+
+/*
+Fake input parameters are used to "emulate" input/output parameters.
+Each inout parameter should be defined in RETURNS(...) section
+and allso have a "mirror" in input section, mirror name shoul be:
+FdpDataProvider.InOutInputParameterPrefix + [parameter name]
+ex:
+in_inputOutputID is input mirror FOR inout parameter inputOutputID
+*/
+CREATE PROCEDURE OutRefTest(
+	ID					INTEGER,
+	in_inputOutputID	INTEGER,
+	str					VARCHAR(50),
+	in_inputOutputStr	VARCHAR(50)
+	)
+RETURNS(
+	inputOutputID  INTEGER,
+	inputOutputStr VARCHAR(50),
+	outputID       INTEGER,
+	outputStr      VARCHAR(50)
+	)
+AS
+BEGIN
+	outputID       = ID;
+	inputOutputID  = ID + in_inputOutputID;
+	outputStr      = str;
+	inputOutputStr = str || in_inputOutputStr;
+	SUSPEND;
+END
+COMMIT;
+
+-- OutRefEnumTest
+
+CREATE PROCEDURE OutRefEnumTest(
+		str					VARCHAR(50),
+		in_inputOutputStr	VARCHAR(50)
+		)
+RETURNS (
+	inputOutputStr VARCHAR(50),
+	outputStr      VARCHAR(50)
+	)
+AS
+BEGIN
+	outputStr      = str;
+	inputOutputStr = str || in_inputOutputStr;
+	SUSPEND;
+END
+COMMIT;
+
+-- ExecuteScalarTest
+
+CREATE PROCEDURE Scalar_DataReader
+RETURNS(
+	intField	INTEGER,
+	stringField	VARCHAR(50)
+	)
+AS
+BEGIN
+	intField = 12345;
+	stringField = '54321';
+	SUSPEND;
+END
+COMMIT;
+
+CREATE PROCEDURE Scalar_OutputParameter
+RETURNS (
+	outputInt      INTEGER,
+	outputString   VARCHAR(50)
+	)
+AS
+BEGIN
+	outputInt = 12345;
+	outputString = '54321';
+	SUSPEND;
+END
+COMMIT;
+
+/*
+"Return_Value" is the name for ReturnValue "emulating"
+may be changed: FdpDataProvider.ReturnParameterName
+*/
+CREATE PROCEDURE Scalar_ReturnParameter
+RETURNS (Return_Value INTEGER)
+AS
+BEGIN
+	Return_Value = 12345;
+	SUSPEND;
+END
+COMMIT;
+
+-- Data Types test
+
+/*
+Data definitions according to:
+http://www.firebirdsql.org/manual/migration-mssql-data-types.html
+
+BUT! BLOB is ised for BINARY data! not CHAR
+*/
+
+CREATE TABLE DataTypeTest
+(
+	DataTypeID      INTEGER NOT NULL PRIMARY KEY,
+	Binary_         BLOB,
+	Boolean_        CHAR(1),
+	Byte_           SMALLINT,
+	Bytes_          BLOB,
+	CHAR_           CHAR(1),
+	DateTime_       TIMESTAMP,
+	Decimal_        DECIMAL(10, 2),
+	Double_         DOUBLE PRECISION,
+	Guid_           CHAR(38),
+	Int16_          SMALLINT,
+	Int32_          INTEGER,
+	Int64_          NUMERIC(11),
+	Money_          DECIMAL(18, 4),
+	SByte_          SMALLINT,
+	Single_         FLOAT,
+	Stream_         BLOB,
+	String_         VARCHAR(50) CHARACTER SET UNICODE_FSS,
+	UInt16_         SMALLINT,
+	UInt32_         INTEGER,
+	UInt64_         NUMERIC(11),
+	Xml_            CHAR(1000)
+)
+COMMIT;
+
+CREATE GENERATOR DataTypeID;
+COMMIT;
+
+CREATE TRIGGER CREATE_DataTypeTest FOR DataTypeTest
+BEFORE INSERT POSITION 0
+AS BEGIN
+	NEW.DataTypeID = GEN_ID(DataTypeID, 1); 
+END
+COMMIT;
+
+INSERT INTO DataTypeTest
+	(Binary_, Boolean_,   Byte_,  Bytes_,  CHAR_,  DateTime_, Decimal_,
+	 Double_,    Guid_,  Int16_,  Int32_,  Int64_,    Money_,   SByte_,
+	 Single_,  Stream_, String_, UInt16_, UInt32_,   UInt64_,     Xml_)
+VALUES
+	(   NULL,     NULL,    NULL,    NULL,    NULL,      NULL,     NULL,
+	    NULL,     NULL,    NULL,    NULL,    NULL,      NULL,     NULL,
+	    NULL,     NULL,    NULL,    NULL,    NULL,      NULL,     NULL);
+COMMIT;
+
+INSERT INTO DataTypeTest
+	(Binary_,	Boolean_,	Byte_,   Bytes_,  CHAR_,	DateTime_, Decimal_,
+	 Double_,	Guid_,		Int16_,  Int32_,  Int64_,    Money_,   SByte_,
+	 Single_,	Stream_,	String_, UInt16_, UInt32_,   UInt64_,
+	 Xml_)
+VALUES
+	('dddddddddddddddd', 1,  255,'dddddddddddddddd', 'B', 'NOW', 12345.67,
+	1234.567, 'dddddddddddddddddddddddddddddddd', 32767, 32768, 1000000, 12.3456, 127,
+	1234.123, 'dddddddddddddddd', 'string', 32767, 32768, 200000000,
+	'<root><element strattr="strvalue" intattr="12345"/></root>');
+COMMIT;
+
+
+
+DROP TABLE Parent     COMMIT;
+DROP TABLE Child      COMMIT;
+DROP TABLE GrandChild COMMIT;
+
+CREATE TABLE Parent     (ParentID int, Value1  int)                   COMMIT;
+CREATE TABLE Child      (ParentID int, ChildID int)                   COMMIT;
+CREATE TABLE GrandChild (ParentID int, ChildID int, GrandChildID int) COMMIT;
+
+
+DROP TABLE LinqDataTypes COMMIT;
+
+CREATE TABLE LinqDataTypes
+(
+	ID             int,
+	MoneyValue     decimal(10,4),
+	DateTimeValue  timestamp,
+	DateTimeValue2 timestamp,
+	BoolValue      char(1),
+	GuidValue      char(38),
+	BinaryValue    blob,
+	SmallIntValue  smallint,
+	IntValue       int,
+	BigIntValue    bigint
+)
+COMMIT;
+
+DROP GENERATOR SequenceTestSeq
+COMMIT;
+
+CREATE GENERATOR SequenceTestSeq
+COMMIT;
+
+DROP TABLE SequenceTest COMMIT;
+
+CREATE TABLE SequenceTest
+(
+	ID     int         NOT NULL PRIMARY KEY,
+	Value_ VARCHAR(50) NOT NULL
+)
+COMMIT;
+
+
+DROP TRIGGER CREATE_ID
+COMMIT;
+
+DROP GENERATOR TestIdentityID
+COMMIT;
+
+DROP TABLE TestIdentity
+COMMIT;
+
+CREATE TABLE TestIdentity (
+	ID INTEGER NOT NULL PRIMARY KEY
+)
+COMMIT;
+
+CREATE GENERATOR TestIdentityID;
+COMMIT;
+
+CREATE TRIGGER CREATE_ID FOR TestIdentity
+BEFORE INSERT POSITION 0
+AS BEGIN
+	NEW.ID = GEN_ID(TestIdentityID, 1);
+END
+COMMIT;
+
+
+CREATE VIEW PersonView
+AS
+    SELECT * FROM Person
+COMMIT;