/// <summary> /// 写入单个数据源对象。 /// </summary> /// <param name="writer">语句写入器。</param> /// <param name="fragment">写入语句。</param> protected virtual void WriteFragmentForSource(SqlWriter writer, ISqlFragment fragment) { var source = (SourceFragment)fragment; if (source.Join.HasValue) { WriteFragmentForSourceJoin(writer, source); WriteFragmentForSourceContent(writer, source); WriteFragmentForSourceCondition(writer, source); } else { WriteFragmentForSourceContent(writer, source); } }
/// <summary> /// 写入数据源内容。 /// </summary> /// <param name="writer">语句写入器。</param> /// <param name="source">数据源语句。</param> protected virtual void WriteFragmentForSourceContent(SqlWriter writer, ISourceFragment source) { if (source is SelectFragment || source is SetFragment) { writer.Write('('); source.WriteSql(writer); writer.Write(')'); } else { source.WriteSql(writer); } if (!(source is InheritFragment)) { writer.Write(" AS "); writer.Write(source.AliasName); } }
private void WriteBinaryForSimple(SqlWriter writer, ISqlFragment fragment) { var binary = (BinaryFragment)fragment; binary.Left.WriteSql(writer); switch (binary.Kind) { case EBinaryKind.AndAlso: break; case EBinaryKind.OrElse: break; case EBinaryKind.Add: writer.Write(" + "); break; case EBinaryKind.Subtract: writer.Write(" - "); break; case EBinaryKind.Multiply: writer.Write(" * "); break; case EBinaryKind.Divide: writer.Write(" / "); break; case EBinaryKind.Modulo: writer.Write(" % "); break; case EBinaryKind.And: writer.Write(" & "); break; case EBinaryKind.Or: writer.Write(" | "); break; case EBinaryKind.ExclusiveOr: writer.Write(" ^ "); break; case EBinaryKind.Equal: writer.Write(" = "); break; case EBinaryKind.NotEqual: writer.Write(" != "); break; case EBinaryKind.GreaterThanOrEqual: writer.Write(" >= "); break; case EBinaryKind.GreaterThan: writer.Write(" > "); break; case EBinaryKind.LessThan: writer.Write(" < "); break; case EBinaryKind.LessThanOrEqual: writer.Write(" <= "); break; } binary.Right.WriteSql(writer); }
/// <summary> /// 写入参数名称。 /// </summary> /// <param name="writer">语句写入器。</param> /// <param name="name">名称。</param> public virtual void WriteParameterName(SqlWriter writer, string name) { writer.Write('@'); writer.Write(name); }
/// <summary> /// 写入别名。 /// </summary> /// <param name="writer">语句写入器。</param> /// <param name="name">名称。</param> public virtual void WriteAliasName(SqlWriter writer, string name) { writer.Write(" AS "); writer.Write(name); }
/// <summary> /// 写入数据库安全名称。 /// </summary> /// <param name="writer">语句写入器。</param> /// <param name="name">名称。</param> public abstract void WriteDbName(SqlWriter writer, string name);
/// <summary> /// 写入语句终止符。 /// </summary> /// <param name="writer">语句写入器。</param> /// <param name="fragment">当前语句。</param> public virtual void WriteTerminator(SqlWriter writer, ISqlFragment fragment) => writer.Write(';');
/// <summary> /// 写入语句结束符。 /// </summary> /// <param name="writer">语句写入器。</param> /// <param name="fragment">片段对象。</param> internal void WriteTerminator(SqlWriter writer, ISqlFragment fragment) { _FragmentWriter.WriteTerminator(writer, fragment); }
/// <summary> /// 写入语句片段。 /// </summary> /// <param name="writer">语句写入器。</param> /// <param name="fragment">片段对象。</param> internal void WriteFragment(SqlWriter writer, ISqlFragment fragment) { _FragmentWriter.WriteFragment(writer, fragment); }
/// <summary> /// 写入数据库对象名称。 /// </summary> /// <param name="writer">语句写入器。</param> /// <param name="name">名称。</param> /// <param name="schema">架构名。</param> public abstract void WriteDbObject(SqlWriter writer, string name, string schema);