public void GenerateColumnDefinition(SqlQueryBuilder queryBuilder, IEnumerable <ColumnMapping <TEntity> > mappings) { bool firstColumn = true; foreach (ColumnMapping <TEntity> column in mappings) { if (firstColumn) { firstColumn = false; } else { queryBuilder.Append(", "); } queryBuilder.Append(column.DbColumnName) .Append(" ") .Append(SqlTypeTranslator.TranslateType <TEntity>(column)); if (column.IsRequired) { queryBuilder.Append(" NOT NULL"); } else { queryBuilder.Append(" NULL"); } } }
public void AppendMergeStatement(SqlQueryBuilder queryBuilder) { queryBuilder.Append(" WHEN MATCHED THEN UPDATE SET "); bool isFirst = true; foreach (ColumnMapping <TEntity> column in _mappingAdapter.GetColumns().Where(c => !c.IsIdentity)) { if (isFirst) { isFirst = false; } else { queryBuilder.Append(", "); } queryBuilder.Append(TARGET_TABLE_ALIAS) .Append(".[") .Append(column.DbColumnName) .Append("] = ") .Append(SOURCE_TABLE_ALIAS) .Append(".[") .Append(column.DbColumnName) .Append("]"); } }
public (string, IEnumerable <object>) TranslateQuery(MergeStatement <TEntity> mergeQuery) { var queryBuilder = new SqlQueryBuilder(); // Merge Statement AppendOperation(queryBuilder, "MERGE INTO", tableAlias: TARGET_TABLE_ALIAS); // Using Statement AppendOperation(queryBuilder, " USING", mergeQuery.TemporaryTableName, SOURCE_TABLE_ALIAS); queryBuilder.Append(" ON "); AppendMergeJoinKeys(queryBuilder, mergeQuery.Keys); // Update Into if (mergeQuery.Type == MergeStatement <TEntity> .MergeType.UpdateOnly || mergeQuery.Type == MergeStatement <TEntity> .MergeType.InsertOrUpdate) { AppendMergeStatement(queryBuilder); } // Insert Statement if (mergeQuery.Type == MergeStatement <TEntity> .MergeType.InsertOnly || mergeQuery.Type == MergeStatement <TEntity> .MergeType.InsertOrUpdate) { AppendInsertMergeStatement(queryBuilder); } queryBuilder.Append(";"); return(queryBuilder.Build()); }
public void AppendAliasMember(SqlQueryBuilder queryBuilder, string tableAlias, MemberExpression member) { // Source queryBuilder.Append(tableAlias) .Append(".["); _statementGeneration.AppendPart(queryBuilder, member); queryBuilder.Append("]"); }
protected void AppendOperation(SqlQueryBuilder builder, string operation, string tableName = null, string tableAlias = null) { builder.Append(operation) .Append(" ") .Append(tableName ?? _mappingAdapter.GetTableName()); if (tableAlias != null) { builder.Append(" AS ") .Append(tableAlias); } }
protected override Expression VisitMember(MemberExpression node) { string memberName = node.Member.Name; ColumnMapping <TEntity> column = _mappingAdapter.GetColumns() .First(c => c.PropertyInfo.Name == memberName); _queryBuilder.Append(column.DbColumnName); return(node); }
public SqlQueryBuilder GenerateCreateQuery(string tableName) { var queryBuilder = new SqlQueryBuilder(); AppendOperation(queryBuilder, "CREATE TABLE", tableName); queryBuilder.Append(" ("); GenerateColumnDefinition(queryBuilder, _mappingAdapter.GetColumns().Where(c => !c.IsIdentity)); queryBuilder.Append(" )"); return(queryBuilder); }
protected void AppendPredicate(SqlQueryBuilder queryBuilder, Expression <Func <TEntity, bool> > predicate) { if (predicate == null) { return; } queryBuilder.Append(" WHERE "); _statementGeneration.AppendPart(queryBuilder, predicate); }
protected void AppendUpdateStatements(SqlQueryBuilder queryBuilder, IEnumerable <MemberAssignment> assignments) { queryBuilder.Append(" SET "); bool first = true; foreach (MemberAssignment assignment in assignments) { if (first) { first = false; } else { queryBuilder.Append(", "); } Expression asssignExpression = ExpressionHelper.MakeAssign(assignment); _statementGeneration.AppendPart(queryBuilder, asssignExpression); } }
public void AppendSourceAndTargetOperator(SqlQueryBuilder queryBuilder, MemberExpression member, ExpressionType @operator) { // Source AppendAliasMember(queryBuilder, SOURCE_TABLE_ALIAS, member); // Operator queryBuilder.Append(" ") .Append(SqlOperatorTranslator.GetOpertor(@operator)) .Append(" "); // Destination AppendAliasMember(queryBuilder, TARGET_TABLE_ALIAS, member); }
public void AppendInsertMergeStatement(SqlQueryBuilder queryBuilder) { List <ColumnMapping <TEntity> > columns = _mappingAdapter.GetColumns() .Where(c => !c.IsIdentity) .ToList(); queryBuilder.Append(" WHEN NOT MATCHED THEN INSERT (") .Append( string.Join(", ", columns.Select(c => c.DbColumnName)) ) .Append(") VALUES (") .Append( string.Join(", ", columns.Select(c => SOURCE_TABLE_ALIAS + ".[" + c.DbColumnName + "]")) ) .Append(")"); }
public void AppendMergeJoinKeys(SqlQueryBuilder queryBuilder, IEnumerable <MemberExpression> expressions) { bool first = true; foreach (MemberExpression expression in expressions) { if (first) { first = false; } else { queryBuilder.Append(" AND "); } AppendSourceAndTargetOperator(queryBuilder, expression, ExpressionType.Equal); } }