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); } } } } }
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); }
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); }
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); }
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); }
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; }
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); }