예제 #1
0
        /// <inheritdoc />
        protected override void VisitOfLts(MethodCallExpression node)
        {
            switch (node.Method.Name)
            {
            case MethodCall.TimeOut:

                visitor.SetTimeOut((int)node.Arguments[1].GetValueFromExpression());

                base.Visit(node.Arguments[0]);

                break;

            case MethodCall.WatchSql:
                buildWatchSql = true;

                Visit(node.Arguments[1]);

                buildWatchSql = false;

                Visit(node.Arguments[0]);

                break;

            case MethodCall.Delete:

                Expression objectExp = node.Arguments[0];

                Workflow(() =>
                {
                    writer.Delete();

                    var tableInfo = MakeTableInfo(objectExp.Type);

                    var prefix = GetEntryAlias(tableInfo.TableType, string.Empty);

                    writer.Alias(prefix);

                    writer.From();

                    WriteTableName(tableInfo, prefix);
                }, () =>
                {
                    if (node.Arguments.Count > 1)
                    {
                        base.VisitCondition(node);
                    }
                    else
                    {
                        base.Visit(objectExp);
                    }
                });

                break;

            default:
                base.VisitOfLts(node);

                break;
            }
        }
예제 #2
0
        /// <inheritdoc />
        protected override void VisitOfLts(MethodCallExpression node)
        {
            switch (node.Method.Name)
            {
            case MethodCall.TimeOut:

                visitor.SetTimeOut((int)node.Arguments[1].GetValueFromExpression());

                base.Visit(node.Arguments[0]);

                break;

            case MethodCall.WatchSql:
                buildWatchSql = true;

                Visit(node.Arguments[1]);

                buildWatchSql = false;

                Visit(node.Arguments[0]);

                break;

            case MethodCall.Insert:

                var insertFields = new List <string>();

                Expression objectExp = node.Arguments[0];

                base.Visit(objectExp);

                Workflow(() =>
                {
                    var tableInfo = MakeTableInfo(objectExp.Type);

                    writer.Insert();

                    WriteTableName(tableInfo, string.Empty);

                    var enumerator = insertFields.GetEnumerator();

                    if (enumerator.MoveNext())
                    {
                        writer.OpenBrace();

                        writer.Name(enumerator.Current);

                        while (enumerator.MoveNext())
                        {
                            writer.Delimiter();

                            writer.Name(enumerator.Current);
                        }

                        writer.CloseBrace();
                    }
                    else
                    {
                        throw new DException("未指定更新字段!");
                    }
                }, () =>
                {
                    using (var visitor = new InsertSelectVisitor(this, insertFields))
                    {
                        visitor.Startup(node.Arguments[1]);
                    }
                });

                break;

            default:
                base.VisitOfLts(node);

                break;
            }
        }
예제 #3
0
        /// <inheritdoc />
        protected override void VisitOfLts(MethodCallExpression node)
        {
            switch (node.Method.Name)
            {
            case MethodCall.TimeOut:

                visitor.SetTimeOut((int)node.Arguments[1].GetValueFromExpression());

                base.Visit(node.Arguments[0]);

                break;

            case MethodCall.WatchSql:
                buildWatchSql = true;

                Visit(node.Arguments[1]);

                buildWatchSql = false;

                Visit(node.Arguments[0]);

                break;

            case MethodCall.Update:

                Expression objectExp = node.Arguments[0];

                Workflow(() =>
                {
                    writer.Update();

                    var tableInfo = MakeTableInfo(objectExp.Type);

                    var prefix = GetEntryAlias(tableInfo.TableType, string.Empty);

                    if (settings.Engine == DatabaseEngine.SqlServer || settings.Engine == DatabaseEngine.Access)
                    {
                        writer.Alias(prefix);
                    }
                    else
                    {
                        WriteTableName(tableInfo, prefix);
                    }

                    writer.Set();

                    Visit(node.Arguments[1]);

                    if (settings.Engine == DatabaseEngine.SqlServer || settings.Engine == DatabaseEngine.Access)
                    {
                        writer.From();

                        WriteTableName(tableInfo, prefix);
                    }
                }, () =>
                {
                    Visit(objectExp);
                });

                break;

            default:
                base.VisitOfLts(node);

                break;
            }
        }