예제 #1
0
        public void AddAllTableJoinRows(List <RawTableJoinRow> joinRowList, string name, SqlQualifiedJoinTableExpression joinExpression)
        {
            var newTableRows = new List <RawTableJoinRow>( );
            var filter       = HelperConditional.GetRowFilter(joinExpression.OnClause.Expression, this);

            foreach (var currentRawRows in RawRowList)
            {
                var currentRowCount = newTableRows.Count;

                foreach (var row in joinRowList)
                {
                    var newRows = new RawTableJoinRow(currentRawRows)
                    {
                        row.First()
                    };
                    if (filter.IsValid(newRows))
                    {
                        newTableRows.Add(newRows);
                    }
                }

                if (currentRowCount == newTableRows.Count && joinExpression.JoinOperator == SqlJoinOperatorType.LeftOuterJoin)
                {
                    newTableRows.Add(currentRawRows);
                }
            }

            RawRowList = newTableRows;
        }
예제 #2
0
 public void ExecuteWhereClause(SqlWhereClause whereClause)
 {
     foreach (var child in whereClause.Children)
     {
         var filter = HelperConditional.GetRowFilter(( SqlBooleanExpression )child, this);
         RawRowList = RawRowList.Where(r => filter.IsValid(r)).ToList(  );
     }
 }
예제 #3
0
        private void ValidateAllForeignKeyConstraints(ArrayList row, Table table)
        {
            foreach (var constraint in table.ForeignKeyConstraints.Where(k => k.CheckThrowsException))
            {
                for (int index = 0; index < constraint.Columns.Count; index++)
                {
                    var column     = table.Columns.Single(c => c.Name == constraint.Columns[index]);
                    var foreignKey = row[column.Order];
                    if (foreignKey != null && foreignKey is DBNull == false)
                    {
                        var referencedTable  = ((MemoryDbConnection )_Command.Connection).GetMemoryDatabase( ).Tables[constraint.ReferencedTableName];
                        var referencedColumn = referencedTable.Columns.Single(c => c.Name == constraint.ReferencedColumns[index]);

                        if (referencedTable.Rows.Any(r => HelperConditional.IsPredicateCorrect(foreignKey, r[referencedColumn.Order], SqlComparisonBooleanExpressionType.Equals)) == false)
                        {
                            throw new SqlInsertInvalidForeignKeyException(constraint.Name, referencedTable.FullName, referencedColumn.Name);
                        }
                    }
                }
            }
        }