コード例 #1
0
        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();
                    }
                }
            }
        }
コード例 #2
0
        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");
            }
        }
コード例 #3
0
ファイル: Orm.cs プロジェクト: zh-qi/onlyorm
        /// <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;
            }));
        }
コード例 #4
0
        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);
        }
コード例 #5
0
ファイル: Orm.cs プロジェクト: zh-qi/onlyorm
        /// <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;
            }));
        }
コード例 #6
0
        public string ToString(SqlVisitor visitor)
        {
            var builder = new StringBuilder(1024);

            using (var writer = new SqlWriter(builder)) {
                WriteSql(writer, visitor);
            }

            return(builder.ToString());
        }
コード例 #7
0
        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());
        }
コード例 #8
0
        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);
        }
コード例 #9
0
        /// <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));
            }
        }
コード例 #10
0
ファイル: Orm.cs プロジェクト: zh-qi/onlyorm
        /// <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;
            }));
        }
コード例 #11
0
 public ISqlElement Accept(SqlVisitor visitor)
 {
     return(visitor.VisitAggregateFunction(this));
 }
コード例 #12
0
 public ISqlElement Accept(SqlVisitor visitor)
 {
     return(visitor.VisitSubqueryTable(this));
 }
コード例 #13
0
 public abstract void WriteSql(SqlWriter writer, SqlVisitor visitor);
コード例 #14
0
ファイル: IsNullExpression.cs プロジェクト: xT10r/simple-1c
 public ISqlElement Accept(SqlVisitor visitor)
 {
     return(visitor.VisitIsNullExpression(this));
 }
コード例 #15
0
 public ISqlElement Accept(SqlVisitor visitor)
 {
     return(visitor.VisitTableDeclaration(this));
 }
コード例 #16
0
 public ISqlElement Accept(SqlVisitor visitor)
 {
     return(visitor.VisitIsReference(this));
 }
コード例 #17
0
 public override void WriteSql(SqlWriter writer, SqlVisitor visitor)
 {
     writer.Write("TOP ");
     TopCount.WriteSql(writer, visitor);
     writer.Write(" ");
 }
コード例 #18
0
 public override void WriteSql(SqlWriter writer, SqlVisitor visitor)
 {
     Left.WriteSql(writer, visitor);
     writer.Write(GetOperator(Kind));
     Right.WriteSql(writer, visitor);
 }
コード例 #19
0
ファイル: OrderByClause.cs プロジェクト: xT10r/simple-1c
 public ISqlElement Accept(SqlVisitor visitor)
 {
     return(visitor.VisitOrderingElement(this));
 }
コード例 #20
0
 public ISqlElement Accept(SqlVisitor visitor)
 {
     return(visitor.VisitParameter(this));
 }
コード例 #21
0
 public ISqlElement Accept(SqlVisitor visitor)
 {
     return(visitor.VisitQueryFunction(this));
 }
コード例 #22
0
 public ISqlElement Accept(SqlVisitor visitor)
 {
     return(visitor.VisitValueLiteral(this));
 }
コード例 #23
0
ファイル: ListExpression.cs プロジェクト: xT10r/simple-1c
 public ISqlElement Accept(SqlVisitor visitor)
 {
     return(visitor.VisitList(this));
 }
コード例 #24
0
        private string BuildPropertyType(PropertyModel propertyModel)
        {
            ArgumentUtility.CheckNotNull("propertyModel", propertyModel);

            return(SqlVisitor.GetSqlPrimitiveType(propertyModel.TypeUsage));
        }
コード例 #25
0
 public override void WriteSql(SqlWriter writer, SqlVisitor visitor)
 {
     // Symbol pair should never be part of a SqlBuilder.
     Debug.Assert(false);
 }
コード例 #26
0
 public ISqlElement Accept(SqlVisitor visitor)
 {
     return(visitor.VisitSelectField(this));
 }
コード例 #27
0
ファイル: BinaryExpression.cs プロジェクト: xT10r/simple-1c
 public ISqlElement Accept(SqlVisitor visitor)
 {
     return(visitor.VisitBinary(this));
 }
コード例 #28
0
        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;
        }
コード例 #29
0
 public ISqlElement Accept(SqlVisitor visitor)
 {
     return(visitor.VisitGroupBy(this));
 }