void ISqlElement.Render(RenderContext context) { if (context.Mode == RenderMode.Nested) { switch (Target) { case Column column: context.WriteIdentifier(column.Name); break; default: context.Render(Target); break; } context.Write(" = "); context.Render(Value); } else { using (context.EnterChildMode(RenderMode.Nested)) { context.Write("SET "); context.Render(Target); context.Write(" = "); context.Render(Value); context.Write(';'); } } }
void ISqlElement.Render(RenderContext context) { context.WriteIdentifier(Name); context.Write(' '); context.Render(Type); foreach (var constraint in Constraints) { context.Write(' '); context.Render(constraint); } }
void ISqlElement.Render(RenderContext context) { using (context.EnterChildMode(RenderMode.Nested)) { if (Left is null || Right is null) { // A value is null, get the non-null value var value = Left ?? Right; if (value is null) { throw new InvalidCommandException("Both sides of a condition operation cannot be null."); } // Note that we are supporting binary operators Equal and NotEqual below to allow // automatic conversion of null to IS NULL or IS NOT NULL clauses. switch (OperationType) { case OperationType.Equal: case OperationType.IsNull: context.Render(value); context.Write(" IS NULL"); return; case OperationType.NotEqual: case OperationType.IsNotNull: context.Render(value); context.Write(" IS NOT NULL"); return; case OperationType.Exists: context.Write("EXISTS "); context.Render(value); return; case OperationType.NotExists: context.Write("NOT EXISTS "); context.Render(value); return; default: throw new InvalidCommandException($"The binary operator '{OperationType}' requires two arguments."); } }
void ISqlElement.Render(RenderContext context) { var output = OutputType.None; if (_returning?.Any() == true) { output = context.Dialect.OutputType; if (output == OutputType.None) { throw new InvalidCommandException("This dialect does not support return clauses in delete statements."); } } using (context.EnterChildMode(RenderMode.Nested)) { context.Write("DELETE FROM "); context.Render(_from.Value); // OUTPUT statements are rendered before where clauses if (output == OutputType.Output) { context.WriteLine(); context.Write("OUTPUT "); context.RenderDelimited(_returning); } if (Where != null) { context.WriteLine(); context.Write("WHERE "); context.Render(Where.Value); } // RETURNING statements are rendered after where clauses if (output == OutputType.Returning) { context.WriteLine(); context.Write("RETURNING "); context.RenderDelimited(_returning); } context.Write(';'); } }
void ISqlElement.Render(RenderContext context) { if (Name == null) { throw new InvalidCommandException("Create table statement must specify a name."); } context.Write("CREATE TABLE "); context.Render(Name); context.WriteLine(); context.WriteLine("("); context.RenderDelimited(Columns, "," + context.LineDelimiter); foreach (var constraint in Constraints) { context.WriteLine(","); context.Render(constraint); } context.WriteLine(); context.Write(");"); }
void ISqlElement.Render(RenderContext context) { Console.WriteLine("(CASE"); foreach (var item in Cases) { Console.WriteLine(" WHEN "); context.Render(item.When.Value); Console.WriteLine(" THEN "); context.Render(item.Then); } if (Else != null) { Console.WriteLine(" ELSE "); context.Render(Else); } Console.WriteLine(" END)"); }
void ISqlElement.Render(RenderContext context) { using (context.EnterChildMode(RenderMode.Nested)) { context.Render(Left); switch (Symbol) { case ArithmeticOperator.Add: context.Write(" + "); break; case ArithmeticOperator.Subtract: context.Write(" - "); break; case ArithmeticOperator.Multiply: context.Write(" * "); break; case ArithmeticOperator.Divide: context.Write(" / "); break; case ArithmeticOperator.Modulo: context.Write(" % "); break; case ArithmeticOperator.BitShiftLeft: context.Write(" << "); break; case ArithmeticOperator.BitShiftRight: context.Write(" >> "); break; default: break; } context.Render(Right); } }
void ISqlElement.Render(RenderContext context) { switch (JoinType) { case JoinType.Join: context.Write("\nJOIN "); break; case JoinType.Inner: context.Write("\nINNER JOIN "); break; case JoinType.LeftOuter: context.Write("\nLEFT JOIN "); break; case JoinType.RightOuter: context.Write("\nRIGHT JOIN "); break; case JoinType.FullOuter: context.Write("\nOUT JOIN "); break; case JoinType.Cross: context.Write("\nCROSS JOIN "); break; default: break; } context.Render(Table); if (On != null) { context.Write(" ON "); context.Render(On.Value); } }
void ISqlElement.Render(RenderContext context) { context.Write("IF ("); context.Render(Condition?.Value ?? throw new InvalidCommandException("IF condition must not be null.")); context.WriteLine(")"); context.Render(Then ?? throw new InvalidCommandException("Then statement of IF condition must not be null.")); if (Else != null) { context.WriteLine(); context.WriteLine("ELSE"); context.Render(Else); } }
void ISqlElement.Render(RenderContext context) { context.Write("CAST("); context.Render(Expression); context.Write(" AS "); if (As.HasValue) { context.Write(context.Dialect.FormatType(As.Value, AsParams)); } else { context.Write(AsRaw); } context.Write(')'); }
void ISqlElement.Render(RenderContext context) { context.Write("DROP "); switch (Type) { case DropType.Table: context.Write("TABLE "); break; case DropType.Constraint: throw new NotImplementedException(); default: throw new InvalidCommandException($"Unrecognized drop type '{Type}'"); } context.Render(Target); context.Write(';'); }
void ISqlElement.Render(RenderContext context) { if (Unique) { context.Write("CREATE UNIQUE INDEX "); } else { context.Write("CREATE INDEX "); } context.WriteIdentifier(Name); context.WriteLine(); context.Write("ON "); context.Render(On); context.Write('('); context.RenderDelimited(Columns); context.Write(");"); }
void ISqlElement.Render(RenderContext context) { context.Write("CAST("); context.Render(Expression); context.Write(" AS "); if (As.HasValue) { context.Write(context.Dialect.FormatType(As.Value, AsParams)); } else if (AsRaw != null) { context.Write(AsRaw); } else { throw new InvalidCommandException("Either 'As' or 'AsRaw' type name must be specified in cast expression."); } context.Write(')'); }