private static string GetTableName(VfpModificationCommandTree modificationCommandTree)
        {
            var formatter = new DmlSqlFormatter();

            modificationCommandTree.Target.Expression.Accept(formatter);

            return(formatter.ToString().Trim());
        }
        internal static string GenerateDeleteSql(VfpProviderManifest vfpManifest, System.Data.Entity.Core.Common.CommandTrees.DbDeleteCommandTree deleteCommandTree, out List <DbParameter> parameters)
        {
            var formatter   = new DmlSqlFormatter();
            var commandTree = GetCommandTreeExpression <VfpDeleteCommandTree>(vfpManifest, deleteCommandTree);

            formatter.Write("DELETE FROM ");
            commandTree.Target.Expression.Accept(formatter);

            formatter.Write(" WHERE ");
            commandTree.Predicate.Accept(formatter);

            parameters = GetParameters(commandTree);

            return(formatter.ToString());
        }
        internal static string GenerateUpdateSql(VfpProviderManifest vfpManifest, System.Data.Entity.Core.Common.CommandTrees.DbUpdateCommandTree updateCommandTree, out List <DbParameter> parameters)
        {
            var commandTree = GetCommandTreeExpression <VfpUpdateCommandTree>(vfpManifest, updateCommandTree);
            var formatter   = new DmlSqlFormatter();

            formatter.Write("UPDATE x");
            formatter.WriteLine(Indentation.Same);

            // set c1 = ..., c2 = ..., ...
            var first = true;

            formatter.Write("SET ");

            foreach (var setClause in commandTree.SetClauses)
            {
                if (first)
                {
                    first = false;
                }
                else
                {
                    formatter.Write(", ");
                }

                formatter.Write("x.");
                setClause.Property.Accept(formatter);
                formatter.Write(" = ");
                setClause.Value.Accept(formatter);
            }

            if (first)
            {
                // If first is still true, it indicates there were no set
                // clauses. Introduce a fake set clause so that:
                // - we acquire the appropriate locks
                // - server-gen columns (e.g. timestamp) get recomputed
                //
                // We use the following pattern:
                //
                //  update Foo
                //  set @i = 0
                //  where ...
                var parameter = formatter.CreateParameter(default(Int32), DbType.Int32);

                formatter.Write(parameter.ParameterName);
                formatter.Write(" = 0");
            }

            formatter.WriteLine(Indentation.Same);

            formatter.Write("FROM ");
            commandTree.Target.Expression.Accept(formatter);
            formatter.Write(" AS x");
            formatter.WriteLine(Indentation.Same);

            // where c1 = ..., c2 = ...
            formatter.Write("WHERE ");

            formatter._usePrefix = true;
            commandTree.Predicate.Accept(formatter);
            formatter._usePrefix = false;

            formatter.WriteLine(Indentation.Same);

            // generate returning sql
            GenerateReturningSql(vfpManifest, commandTree, formatter, commandTree.Returning);

            parameters = GetParameters(commandTree);

            return(formatter.ToString());
        }
        public static string GenerateInsertSql(VfpProviderManifest vfpManifest, System.Data.Entity.Core.Common.CommandTrees.DbInsertCommandTree insertCommandTree, out List <DbParameter> parameters)
        {
            var commandTree = GetCommandTreeExpression <VfpInsertCommandTree>(vfpManifest, insertCommandTree);
            var formatter   = new DmlSqlFormatter();

            formatter.Write("INSERT INTO ");
            commandTree.Target.Expression.Accept(formatter);

            // (c1, c2, c3, ...)
            formatter.Write("(");

            var setClauses = commandTree.SetClauses.Where(x => x.Value.ExpressionKind != VfpExpressionKind.Null).ToArray();

            var first = true;

            foreach (var setClause in setClauses)
            {
                if (first)
                {
                    first = false;
                }
                else
                {
                    formatter.Write(", ");
                }

                setClause.Property.Accept(formatter);
            }

            formatter.Write(")");
            formatter.WriteLine(Indentation.Same);

            // values c1, c2, ...
            first = true;
            formatter.Write("values (");

            foreach (var setClause in setClauses)
            {
                if (first)
                {
                    first = false;
                }
                else
                {
                    formatter.Write(", ");
                }

                setClause.Value.Accept(formatter);
                //translator.RegisterMemberValue(setClause.Property, setClause.Value);
            }

            formatter.Write(")");
            formatter.WriteLine(Indentation.Same);

            // generate returning sql
            GenerateReturningSql(vfpManifest, commandTree, formatter, commandTree.Returning);

            parameters = GetParameters(commandTree);

            return(formatter.ToString());
        }