Exemple #1
0
        private static void AddForeignKeyConstraint(ExecuteNullStatement statement, Dictionary <string, Table> tables, List <Token> tokens)
        {
            var finder               = new TokenFinder(tokens);
            var tableName            = finder.GetIdAfterToken("TOKEN_TABLE");
            var columnName           = finder.GetIdAfterToken("TOKEN_KEY");
            var foreignKeyName       = finder.GetIdAfterToken("TOKEN_CONSTRAINT");
            var referencedTableName  = finder.GetIdAfterToken("TOKEN_REFERENCES", skipParenthesis: false);
            var referencedColumnName = finder.GetIdAfterToken("(", finder.CurrentIndex - 1);

            if (string.IsNullOrWhiteSpace(tableName) || string.IsNullOrWhiteSpace(columnName) ||
                string.IsNullOrWhiteSpace(referencedTableName) || string.IsNullOrWhiteSpace(referencedColumnName))
            {
                throw new InvalidOperationException("A foreign key constrains should contain table + column + referenced table + referenced column");
            }

            var table           = Helper.FindTableAndColumn(tableName, columnName, tables);
            var referencedTable = Helper.FindTableAndColumn(referencedTableName, referencedColumnName, tables);
            var fk = new ForeignKeyConstraint
            {
                Name    = foreignKeyName,
                Columns = new List <string> {
                    columnName
                },
                ReferencedTableName = referencedTableName,
                ReferencedColumns   = new List <string> {
                    referencedColumnName
                }
            };

            table.Table.ForeignKeyConstraints.Add(fk);
        }
Exemple #2
0
        private static void SetCheckConstraint(ExecuteNullStatement statement, Dictionary <string, Table> tables, List <Token> tokens)
        {
            string constraint = null;
            var    finder     = new TokenFinder(tokens);
            var    tableName  = finder.GetIdAfterToken("TOKEN_TABLE");
            var    isCheck    = finder.GetTokenAfterToken("TOKEN_CHECK", "TOKEN_ID");
            var    isAll      = finder.GetTokenAfterToken("TOKEN_ALL", "TOKEN_CONSTRAINT");

            if (isAll == null)
            {
                constraint = finder.GetTokenAfterToken("TOKEN_ID", "TOKEN_CONSTRAINT");
                constraint = Helper.CleanName(constraint);
            }
            var tc          = Helper.FindTable(tableName, tables);
            var constraints = tc.Table.ForeignKeyConstraints;

            if (isAll != null)
            {
                foreach (var keyConstraint in constraints)
                {
                    keyConstraint.CheckThrowsException = isCheck != null;
                }
            }
            else
            {
                var keyConstraint = constraints.SingleOrDefault(c => c.Name == constraint);
                if (keyConstraint == null)
                {
                    throw new SqlInvalidConstraintException(constraint);
                }

                keyConstraint.CheckThrowsException = isCheck != null;
            }
        }
Exemple #3
0
        private static void SetIdentityInsert(ExecuteNullStatement statement, Dictionary <string, Table> tables, List <Token> tokens)
        {
            var finder    = new TokenFinder(tokens);
            var tableName = finder.GetIdAfterToken("TOKEN_IDENTITY_INSERT");
            var isOn      = finder.GetTokenAfterToken("TOKEN_ON", "TOKEN_ID");
            var tc        = Helper.FindTable(tableName, tables);

            tc.Table.Options[Table.OptionEnum.IdentityInsert] = (isOn != null ? "on" : "off");
        }
Exemple #4
0
        private static void AddPrimaryKeyConstraint(ExecuteNullStatement statement, Dictionary <string, Table> tables, List <Token> tokens)
        {
            var finder         = new TokenFinder(tokens);
            var tableName      = finder.GetIdAfterToken("TOKEN_TABLE");
            var columnNames    = finder.GetIdListAfterToken("(");
            var primaryKeyName = finder.GetIdAfterToken("TOKEN_CONSTRAINT");

            var table   = Helper.FindTable(tableName, tables).Table;
            var columns = table.Columns.Where(c => columnNames.Contains(c.Name)).ToList(  );

            table.PrimaryKeyConstraints.Add(primaryKeyName, columns);
            table.PrimaryKeys.AddRange(columns);
            foreach (var column in columns)
            {
                column.IsPrimaryKey = true;
            }
        }
Exemple #5
0
        private static void SetGlobalVariable(ExecuteNullStatement statement, Dictionary <string, Table> tables, List <Token> tokens)
        {
            var finder        = new TokenFinder(tokens);
            var variableName  = finder.GetIdAfterToken("TOKEN_SET", isSingleTokenId: true);
            var variableValue = finder.GetTokenAfterToken("TOKEN_ID", "TOKEN_ID");
            var options       = ((MemoryDbConnection )statement._Command.Connection).GetMemoryDatabase( ).Options;

            if (string.IsNullOrWhiteSpace(variableName) == false &&
                string.IsNullOrWhiteSpace(variableValue) == false &&
                options.ContainsKey(variableName))
            {
                if (variableValue == "NULL")
                {
                    variableValue = null;
                }

                options[variableName] = variableValue;
            }
        }