public override void WriteSql(SqlWriter writer, SqlVisitor visitor) { if (null == sqlFragments) { return; } foreach (var o in sqlFragments) { var str = (o as String); if (null != str) { writer.Write(str); } else { var sqlFragment = (o as ISqlFragment); if (null != sqlFragment) { sqlFragment.WriteSql(writer, visitor); } else { throw new InvalidOperationException(); } } } }
private void AppendType(EdmProperty column, bool isMigrationHistoryPrimaryKey) { Facet storeGenFacet; var type = column.TypeUsage; if (isMigrationHistoryPrimaryKey) { type = TypeUsage.CreateStringTypeUsage(PrimitiveType.GetEdmPrimitiveType(PrimitiveTypeKind.String), false, false, VfpClient.VfpMapping.MaximumCharacterFieldSizeThatCanBeIndex); } AppendIdentifier(SqlVisitor.GetSqlPrimitiveType(type)); AppendSql(column.Nullable ? " null" : " not null"); if (!column.TypeUsage.Facets.TryGetValue("StoreGeneratedPattern", false, out storeGenFacet) || storeGenFacet.Value == null) { return; } var storeGenPattern = (StoreGeneratedPattern)storeGenFacet.Value; if (storeGenPattern == StoreGeneratedPattern.Identity) { AppendSql(" autoinc"); } }
/// <summary> /// 根据实例主键进行更新 /// </summary> /// <param name="action">更新动作</param> /// <param name="conditions">更新的条件</param> public static bool UpdateWhere <T>(Expression <Action <T> > action, Expression <Func <T, bool> > conditions) where T : OrmBaseModel { SqlVisitor visitor = new SqlVisitor(); visitor.Visit(action); var setStr = visitor.GetSql(); var setPrarmes = visitor.GetParameters(); visitor.Visit(conditions); var whereStr = visitor.GetSql(); var wherePrarmes = visitor.GetParameters(); var sqlStr = SqlCache <T> .GetSql(SqlType.UpdateWhere) + setStr + " WHERE " + whereStr; var allParames = new List <MySqlParameter>(); allParames.AddRange(setPrarmes); allParames.AddRange(wherePrarmes); return(ExceteSql <bool>(sqlStr, allParames.ToArray(), command => { var result = command.ExecuteNonQuery(); return result >= 1; })); }
public override void WriteSql(SqlWriter writer, SqlVisitor visitor) { if (NeedsRenaming) { string newName; var i = 0; if (visitor.AllColumnNames.ContainsKey(this.NewName)) { i = visitor.AllColumnNames[this.NewName]; } do { ++i; newName = Name + i.ToString(System.Globalization.CultureInfo.InvariantCulture); } while (visitor.AllColumnNames.ContainsKey(newName)); visitor.AllColumnNames[this.NewName] = i; // Prevent it from being renamed repeatedly. NeedsRenaming = false; NewName = newName; // Add this column name to list of known names so that there are no subsequent // collisions visitor.AllColumnNames[newName] = 0; } writer.Write(NewName); }
/// <summary> /// 批量获取符合条件的数据 /// </summary> /// <param name="conditions">查找的条件</param> public static IList <T> FindWhere <T>(Expression <Func <T, bool> > conditions) where T : OrmBaseModel { SqlVisitor visitor = new SqlVisitor(); visitor.Visit(conditions); var sqlStr = SqlCache <T> .GetSql(SqlType.FindWhere) + visitor.GetSql(); var parameters = visitor.GetParameters(); return(ExceteSql <IList <T> >(sqlStr, parameters, command => { var result = new List <T>(); var type = typeof(T); var properies = SqlCache <T> .AllProperties; var adapter = new MySqlDataAdapter(command); var dataSet = new DataSet(); var count = adapter.Fill(dataSet); for (var i = 0; i < dataSet.Tables[0].Rows.Count; i++) { T t = Activator.CreateInstance <T>(); foreach (var proerty in properies) { var value = dataSet.Tables[0].Rows[i][proerty.GetMappingName()]; proerty.SetValue(t, value is DBNull ? null : value); } result.Add(t); } return result; })); }
public string ToString(SqlVisitor visitor) { var builder = new StringBuilder(1024); using (var writer = new SqlWriter(builder)) { WriteSql(writer, visitor); } return(builder.ToString()); }
public static string WriteSql(ISqlFragment sqlStatement, SqlVisitor visitor) { var builder = new StringBuilder(1024); using (var writer = new SqlWriter(builder)) { sqlStatement.WriteSql(writer, visitor); } return(builder.ToString()); }
internal static string GenerateSql(VfpProviderManifest vfpManifest, DbCommandTree commandTree, out List <DbParameter> parameters, out CommandType commandType) { commandType = CommandType.Text; parameters = null; //Handle Query var queryCommandTree = commandTree as DbQueryCommandTree; if (queryCommandTree != null) { var sqlSelectVisitor = new SqlVisitor(); var sqlFragment = sqlSelectVisitor.Visit(vfpManifest, queryCommandTree, out parameters); return(WriteSql(sqlFragment, sqlSelectVisitor)); } //Handle Function var functionCommandTree = commandTree as DbFunctionCommandTree; if (functionCommandTree != null) { return(DmlSqlFormatter.GenerateFunctionSql(functionCommandTree, out commandType)); } //Handle Insert var insertCommandTree = commandTree as DbInsertCommandTree; if (insertCommandTree != null) { return(DmlSqlFormatter.GenerateInsertSql(vfpManifest, insertCommandTree, out parameters)); } //Handle Delete var deleteCommandTree = commandTree as DbDeleteCommandTree; if (deleteCommandTree != null) { return(DmlSqlFormatter.GenerateDeleteSql(vfpManifest, deleteCommandTree, out parameters)); } //Handle Update var updateCommandTree = commandTree as DbUpdateCommandTree; if (updateCommandTree != null) { return(DmlSqlFormatter.GenerateUpdateSql(vfpManifest, updateCommandTree, out parameters)); } return(null); }
/// <summary> /// Parse the given SQL and return a list of issues. /// </summary> /// <param name="sql"></param> /// <returns></returns> public static IEnumerable <VerificationResults.Issue> Parse(string sql) { using (var reader = new System.IO.StringReader(sql)) { var scriptFragment = (new ScriptDom.TSql100Parser(true)).Parse(reader, out IList <ScriptDom.ParseError> errors); var topFrame = new Symbols.StackFrame(); var visitor = new SqlVisitor( topFrame, new Logger.DebuggingLogger() ); visitor.VisitAndReturnResults(scriptFragment); var functionBodyTypeIssues = topFrame.GetIssuesFromCompilingFunctionBodies().ToArray(); topFrame.PerformTopLevelTypeCheckOfStoredProcedures(); return(functionBodyTypeIssues.Concat(visitor.Issues)); } }
/// <summary> /// 根据表达式目录树,批量的删除 /// </summary> /// <param name="conditions">删除的条件</param> public static bool DeleateWhere <T>(Expression <Func <T, bool> > conditions) where T : OrmBaseModel { if (null == conditions) { return(false); } SqlVisitor visitor = new SqlVisitor(); visitor.Visit(conditions); var sqlStr = SqlCache <T> .GetSql(SqlType.DeleateWhere) + visitor.GetSql(); var parameters = visitor.GetParameters(); return(ExceteSql <bool>(sqlStr, parameters, command => { var result = command.ExecuteNonQuery(); return result >= 1; })); }
public ISqlElement Accept(SqlVisitor visitor) { return(visitor.VisitAggregateFunction(this)); }
public ISqlElement Accept(SqlVisitor visitor) { return(visitor.VisitSubqueryTable(this)); }
public abstract void WriteSql(SqlWriter writer, SqlVisitor visitor);
public ISqlElement Accept(SqlVisitor visitor) { return(visitor.VisitIsNullExpression(this)); }
public ISqlElement Accept(SqlVisitor visitor) { return(visitor.VisitTableDeclaration(this)); }
public ISqlElement Accept(SqlVisitor visitor) { return(visitor.VisitIsReference(this)); }
public override void WriteSql(SqlWriter writer, SqlVisitor visitor) { writer.Write("TOP "); TopCount.WriteSql(writer, visitor); writer.Write(" "); }
public override void WriteSql(SqlWriter writer, SqlVisitor visitor) { Left.WriteSql(writer, visitor); writer.Write(GetOperator(Kind)); Right.WriteSql(writer, visitor); }
public ISqlElement Accept(SqlVisitor visitor) { return(visitor.VisitOrderingElement(this)); }
public ISqlElement Accept(SqlVisitor visitor) { return(visitor.VisitParameter(this)); }
public ISqlElement Accept(SqlVisitor visitor) { return(visitor.VisitQueryFunction(this)); }
public ISqlElement Accept(SqlVisitor visitor) { return(visitor.VisitValueLiteral(this)); }
public ISqlElement Accept(SqlVisitor visitor) { return(visitor.VisitList(this)); }
private string BuildPropertyType(PropertyModel propertyModel) { ArgumentUtility.CheckNotNull("propertyModel", propertyModel); return(SqlVisitor.GetSqlPrimitiveType(propertyModel.TypeUsage)); }
public override void WriteSql(SqlWriter writer, SqlVisitor visitor) { // Symbol pair should never be part of a SqlBuilder. Debug.Assert(false); }
public ISqlElement Accept(SqlVisitor visitor) { return(visitor.VisitSelectField(this)); }
public ISqlElement Accept(SqlVisitor visitor) { return(visitor.VisitBinary(this)); }
public override void WriteSql(SqlWriter writer, SqlVisitor visitor) { #region Check if FROM aliases need to be renamed // Create a list of the aliases used by the outer extents // JoinSymbols have to be treated specially. List <string> outerExtentAliases = null; if ((null != _outerExtents) && (0 < _outerExtents.Count)) { foreach (var outerExtent in _outerExtents.Keys) { var joinSymbol = outerExtent as JoinSymbol; if (joinSymbol != null) { foreach (var symbol in joinSymbol.FlattenedExtentList) { if (null == outerExtentAliases) { outerExtentAliases = new List <string>(); } outerExtentAliases.Add(symbol.NewName); } } else { if (null == outerExtentAliases) { outerExtentAliases = new List <string>(); } outerExtentAliases.Add(outerExtent.NewName); } } } // An then rename each of the FromExtents we have // If AllJoinExtents is non-null - it has precedence. // The new name is derived from the old name - we append an increasing int. var extentList = AllJoinExtents ?? _fromExtents; if (null != extentList) { foreach (var fromAlias in extentList) { if ((null != outerExtentAliases) && outerExtentAliases.Contains(fromAlias.Name)) { var i = visitor.AllExtentNames[fromAlias.Name]; string newName; do { ++i; newName = fromAlias.Name + i.ToString(System.Globalization.CultureInfo.InvariantCulture); } while (visitor.AllExtentNames.ContainsKey(newName)); visitor.AllExtentNames[fromAlias.Name] = i; fromAlias.NewName = newName; // Add extent to list of known names (although i is always incrementing, "prefix11" can // eventually collide with "prefix1" when it is extended) visitor.AllExtentNames[newName] = 0; } // Add the current alias to the list, so that the extents // that follow do not collide with me. if (null == outerExtentAliases) { outerExtentAliases = new List <string>(); } outerExtentAliases.Add(fromAlias.NewName); } } #endregion // Increase the indent, so that the Sql statement is nested by one tab. writer.Indent += 1; // ++ can be confusing in this context writer.Write("SELECT "); if (IsDistinct) { writer.Write("DISTINCT "); } if (Top != null) { Top.WriteSql(writer, visitor); } if ((null == Select) || Select.IsEmpty) { writer.Write("*"); } else { Select.WriteSql(writer, visitor); } writer.WriteLine(); writer.Write("FROM "); From.WriteSql(writer, visitor); if ((null != _where) && !Where.IsEmpty) { writer.WriteLine(); writer.Write("WHERE "); Where.WriteSql(writer, visitor); } if ((null != _groupBy) && !GroupBy.IsEmpty) { writer.WriteLine(); writer.Write("GROUP BY "); GroupBy.WriteSql(writer, visitor); } if ((null != _orderBy) && !OrderBy.IsEmpty && (IsTopMost || Top != null)) { writer.WriteLine(); writer.Write("ORDER BY "); OrderBy.WriteSql(writer, visitor); } --writer.Indent; }
public ISqlElement Accept(SqlVisitor visitor) { return(visitor.VisitGroupBy(this)); }