예제 #1
0
        private string RenderInto(ParametersContainer outParameters, RenderingContext ctx)
        {
            var sb = new StringBuilder();

            ctx.AliasesStack.Push(_aliases);

            if (_isSimple)
            {
                var res = RenderSimple(ctx);
                ctx.AliasesStack.Pop();
                return(res);
            }

            foreach (var part in _parts)
            {
                if (part.Text != null)
                {
                    sb.Append(part.Text);
                }

                if (part.Table != null)
                {
                    var alias = ResolvePlaceholder(ctx, part.Table);
                    if (alias != null)
                    {
                        sb.Append(EscapeUtils.QuoteObjectName(alias));
                    }
                    else
                    {
                        sb.Append(EscapeUtils.QuoteTable(part.Table.Table.Name, part.Table.Table.Schema));
                    }
                }

                if (part.Column != null)
                {
                    var alias = ResolvePlaceholder(ctx, part.Column.TablePlaceholder);
                    if (alias != null)
                    {
                        sb.Append(EscapeUtils.QuoteObjectName(alias));
                        sb.Append(".");
                    }

                    sb.Append(EscapeUtils.QuoteObjectName(part.Column.Column.Name));
                }

                if (part.ParamIdx != -1)
                {
                    sb.Append(outParameters.GetNextParam(_parameters[part.ParamIdx]));
                }

                if (part.RawQuery != null)
                {
                    sb.Append(part.RawQuery.RenderInto(outParameters, ctx));
                }
            }

            ctx.AliasesStack.Pop();
            return(sb.ToString());
        }
예제 #2
0
        private string RenderSimple(RenderingContext ctx)
        {
            var sb = new StringBuilder();

            ctx.AliasesStack.Push(_aliases);

            foreach (var part in _parts)
            {
                if (part.Text != null)
                {
                    sb.Append(part.Text);
                }

                if (part.Table != null)
                {
                    var alias = ResolvePlaceholder(ctx, part.Table);
                    if (alias != null)
                    {
                        sb.Append(EscapeUtils.QuoteObjectName(alias));
                    }
                    else
                    {
                        sb.Append(EscapeUtils.QuoteTable(part.Table.Table.Name, part.Table.Table.Schema));
                    }
                }

                if (part.Column != null)
                {
                    // if (!ctx.skipExplicitColumnTableNames) {
                    var alias = ResolvePlaceholder(ctx, part.Column.TablePlaceholder);
                    if (alias != null)
                    {
                        sb.Append(EscapeUtils.QuoteObjectName(alias));
                        sb.Append(".");
                    }

                    sb.Append(EscapeUtils.QuoteObjectName(part.Column.Column.Name));
                }

                else if (part.ParamIdx != -1)
                {
                    sb.Append(PgTypesConverter.ConvertToPgString(_parameters[part.ParamIdx]));
                }

                else if (part.RawQuery != null)
                {
                    sb.Append(part.RawQuery.RenderSimple(ctx));
                }
            }

            ctx.AliasesStack.Pop();
            return(sb.ToString());
        }