예제 #1
0
        private void GetColumnsConstraintsDatabase(Columns columns)
        {
            Column column = null;

            //List<ColumnConstraint> cons = new List<ColumnConstraint>();
            using (SqlConnection conn = new SqlConnection(connectioString))
            {
                using (SqlCommand command = new SqlCommand("SELECT OBJECTPROPERTY(SCC.constId, 'CnstIsNotRepl') AS NotForReplication, SCC.ColId, RTRIM(Type) AS Type, Name, Text FROM sysobjects SO INNER JOIN syscomments SC ON SC.id = SO.id INNER JOIN sysconstraints SCC ON SCC.constid = SO.id WHERE type IN ('D','C') AND parent_obj = " + columns.Parent.Id.ToString(), conn))
                {
                    conn.Open();
                    using (SqlDataReader reader = command.ExecuteReader())
                    {
                        ColumnConstraint con = null;
                        while (reader.Read())
                        {
                            column = columns.GetById(int.Parse(reader["ColId"].ToString()));
                            con    = new ColumnConstraint(column);
                            con.NotForReplication = reader["NotForReplication"].ToString().Equals("1");
                            con.Name  = reader["Name"].ToString();
                            con.Type  = reader["Type"].ToString().Equals("D") ? Constraint.ConstraintType.Default : Constraint.ConstraintType.Check;
                            con.Value = reader["Text"].ToString();
                            column.Constraints.Add(con);
                        }
                    }
                }
            }
        }
예제 #2
0
 public ColumnConstraints GenerateDiferences(ColumnConstraints CamposOrigen, ColumnConstraints CamposDestino)
 {
     foreach (ColumnConstraint node in CamposDestino)
     {
         if (!CamposOrigen.Find(node.Name))
         {
             node.Status = StatusEnum.ObjectStatusType.CreateStatus;
             CamposOrigen.Parent.Status        = StatusEnum.ObjectStatusType.OriginalStatus;
             CamposOrigen.Parent.Parent.Status = StatusEnum.ObjectStatusType.AlterStatus;
             CamposOrigen.Add(node);
         }
         else
         {
             if (!ColumnConstraint.Compare(CamposOrigen[node.Name], node))
             {
                 node.Status = StatusEnum.ObjectStatusType.AlterStatus;
                 //Indico que hay un ALTER TABLE, pero sobre la columna, no seteo ningun estado.
                 CamposOrigen[node.Name].Parent.Parent.Status = StatusEnum.ObjectStatusType.AlterStatus;
                 CamposOrigen[node.Name] = node.Clone((Column)CamposOrigen[node.Name].Parent);
             }
         }
     }
     foreach (ColumnConstraint node in CamposOrigen)
     {
         if (!CamposDestino.Find(node.Name))
         {
             node.Status = StatusEnum.ObjectStatusType.DropStatus;
             CamposOrigen.Parent.Status        = StatusEnum.ObjectStatusType.OriginalStatus;
             CamposOrigen.Parent.Parent.Status = StatusEnum.ObjectStatusType.AlterStatus;
         }
     }
     return(CamposOrigen);
 }
예제 #3
0
        public void ColumnConstraintSuccessTest()
        {
            Sudoku           sudoku     = CreateTestSudoku();
            ColumnConstraint constraint = new ColumnConstraint();
            bool             result     = constraint.Evaluate(sudoku, xCoord: 2, yCoord: 0);

            Assert.IsTrue(result);
            result = constraint.Evaluate(sudoku, xCoord: 1, yCoord: 0);
            Assert.IsTrue(result);
        }
예제 #4
0
        public void ColumnConstraintFailureFullColumnTest()
        {
            Sudoku sudoku = CreateTestSudoku();

            sudoku.SetValue(1, 2, 1).SetValue(1, 3, 2).SetValue(1, 5, 3).SetValue(1, 7, 6).SetValue(1, 8, 6);
            ColumnConstraint constraint = new ColumnConstraint();
            bool             result     = constraint.Evaluate(sudoku, xCoord: 1, yCoord: 2);

            Assert.IsFalse(result);
        }
예제 #5
0
        public void ColumnConstraintSuccessFullColumnTest()
        {
            Sudoku sudoku = CreateTestSudoku();

            sudoku.SetValue(1, 2, 1).SetValue(1, 3, 2).SetValue(1, 5, 3).SetValue(1, 7, 6).SetValue(1, 8, 9);
            Output.Show(sudoku.Values);
            ColumnConstraint constraint = new ColumnConstraint();
            bool             result     = constraint.Evaluate(sudoku, xCoord: 1, yCoord: 2);

            Assert.IsTrue(result);
        }
예제 #6
0
        public void ColumnConstraintFailTest()
        {
            Sudoku sudoku = CreateTestSudoku();

            sudoku.SetValue(1, 2, 7);  // Duplicate value in Column 1
            Output.Show(sudoku.Values);
            ColumnConstraint constraint = new ColumnConstraint();
            bool             result     = constraint.Evaluate(sudoku, xCoord: 1, yCoord: 0);

            Assert.IsFalse(result);
        }
 public ConstraintDefinition(Option <string> identifier, ColumnConstraint columnConstraint)
 {
     Identifier       = identifier;
     ColumnConstraint = columnConstraint;
 }
예제 #8
0
파일: Parser.cs 프로젝트: fizikci/Cinar
        private ColumnConstraint parseColumnConstraint()
        {
            ColumnConstraint con = new ColumnConstraint();

            if (fCurrentToken.Equals("CONSTRAINT"))
            {
                ReadNextToken(); // skip "constraint"
                con.Name = fCurrentToken.Value.TrimQuotation();
                ReadNextToken();
            }

            if (fCurrentToken.Equals("DEFAULT"))
            {
                con.ConstraintType = ConstraintTypes.Default;
                ReadNextToken();
                con.Default = ParseExpression();

                return con;
            }

            if (fCurrentToken.Equals("CHECK"))
            {
                con.ConstraintType = ConstraintTypes.Check;
                ReadNextToken();
                con.Check = ParseExpression();

                return con;
            }

            if (fCurrentToken.Equals("NOT"))
            {
                ReadNextToken(); // skip "not"
                SkipExpected("NULL");
                con.ConstraintType = ConstraintTypes.NotNull;

                return con;
            }

            if (fCurrentToken.Equals("NULL"))
            {
                ReadNextToken(); // skip "null"
                con.ConstraintType = ConstraintTypes.Null;
                return con;
            }
            if (fCurrentToken.Equals("REFERENCES"))
            {
                con.ConstraintType = ConstraintTypes.ForeignKey;
                ReadNextToken(); // skip "REFERENCES"

                con.RefTable = fCurrentToken.Value.TrimQuotation();
                ReadNextToken();

                if (fCurrentToken.Equals("("))
                {
                    SkipExpected("(");
                    con.RefColumns = parseListString();
                    SkipExpected(")");
                }
                return con;
            }
            if (fCurrentToken.Equals("PRIMARY"))
            {
                con.ConstraintType = ConstraintTypes.PrimaryKey;
                ReadNextToken();
                SkipExpected("KEY");
                SkipExpected("(");
                con.Columns = parseListString();
                SkipExpected(")");
                return con;
            }
            if (fCurrentToken.Equals("UNIQUE"))
            {
                con.ConstraintType = ConstraintTypes.Unique;
                ReadNextToken();
                SkipExpected("(");
                con.Columns = parseListString();
                SkipExpected(")");
                return con;
            }
            if (fCurrentToken.Equals("CHARACTER"))
            {
                ReadNextToken();
                SkipExpected("SET");
                con.ConstraintType = ConstraintTypes.CharacterSet;
                con.CharacterSet = fCurrentToken.Value;
                ReadNextToken();
                return con;
            }
            if (fCurrentToken.Equals("COLLATE"))
            {
                ReadNextToken();
                con.ConstraintType = ConstraintTypes.Collate;
                con.Collate = fCurrentToken.Value;
                ReadNextToken();
                return con;
            }
            if (fCurrentToken.Equals("AUTO_INCREMENT") || fCurrentToken.Equals("IDENTITY"))
            {
                ReadNextToken();
                con.ConstraintType = ConstraintTypes.AutoIncrement;
                return con;
            }

            throw new ParserException("Unexpected keyword: " + fCurrentToken.Value);
        }