コード例 #1
0
        public override string BuildQueryString(int depth)
        {
            var command = "";

            if (keySelector == null)
            {
                command = Indent(depth + 1) + "*";
            }
            else
            {
                if (keySelector.Body.NodeType != ExpressionType.New)
                {
                    command = Indent(depth + 1);
                }
                command += BigQueryTranslateVisitor.BuildQuery(depth + 1, QueryContext.IndentSize, keySelector);
            }

            var sb = new StringBuilder();

            sb.Append(Indent(depth));
            sb.AppendLine("GROUP " + ((each) ? "EACH BY" : "BY"));
            sb.Append(command);

            return(sb.ToString());
        }
コード例 #2
0
        public override string BuildQueryString(int depth)
        {
            var command = "";

            if (selector == null)
            {
                command = Indent(depth + 1) + "*";
            }
            else
            {
                if (selector.Body.NodeType != ExpressionType.New &&
                    selector.Body.NodeType != ExpressionType.MemberInit)
                {
                    command = Indent(depth + 1);
                }
                command += BigQueryTranslateVisitor.BuildQuery(depth + 1, QueryContext.IndentSize, selector);
            }

            var sb = new StringBuilder();

            sb.Append(Indent(depth));
            sb.AppendLine("SELECT");
            sb.Append(command);

            return(sb.ToString());
        }
コード例 #3
0
        public override string BuildQueryString(int depth)
        {
            ITableName    tableName = null;
            IBigQueryable parent    = null;

            if (typedParent is ITableName)
            {
                parent    = (IBigQueryable)typedParent;
                tableName = (ITableName)typedParent;
            }
            else if (typedParent is ITableName)
            {
                parent    = (IBigQueryable)typedParent;
                tableName = (ITableName)typedParent;
            }

            if (tableName != null)
            {
                var sb = new StringBuilder();

                sb.Append(Indent(depth));
                sb.AppendLine("FROM");

                sb.Append(Indent(depth + 1));
                sb.Append("FLATTEN(");
                sb.Append(tableName.GetTableName());

                sb.Append(", ");
                sb.Append(BigQueryTranslateVisitor.BuildQuery(depth, parent.QueryContext.IndentSize, fieldSelector));

                sb.Append(")");

                return(sb.ToString());
            }

            var subquery = typedParent as SubqueryBigQueryable <T>;

            if (subquery != null)
            {
                var sb = new StringBuilder();

                sb.Append(Indent(depth));
                sb.AppendLine("FROM FLATTEN(");

                sb.Append(subquery.BuildQueryStringWithoutFrom(depth));

                sb.Append(", ");
                sb.Append(BigQueryTranslateVisitor.BuildQuery(depth, subquery.QueryContext.IndentSize, fieldSelector));

                sb.Append(")");

                return(sb.ToString());
            }

            throw new InvalidOperationException("Unexpected pattern, please report query to GitHub issues");
        }
コード例 #4
0
        public override string BuildQueryString(int depth)
        {
            var command = BigQueryTranslateVisitor.BuildQuery(depth + 1, QueryContext.IndentSize, predicate);

            var sb = new StringBuilder();

            sb.Append(Indent(depth));
            sb.AppendLine("WHERE");
            sb.Append(Indent(depth + 1));
            sb.Append(command);

            return(sb.ToString());
        }
コード例 #5
0
 string RangeFormat()
 {
     if (timestampFromExpr == null)
     {
         // no needs ToUniversalTime()
         return(string.Format("TABLE_DATE_RANGE({0}, TIMESTAMP('{1}'), TIMESTAMP('{2}'))", prefix, timestampFrom.ToString("yyyy-MM-dd"), timestampTo.ToString("yyyy-MM-dd")));
     }
     else
     {
         var translator = new BigQueryTranslateVisitor();
         var from       = translator.VisitAndClearBuffer(timestampFromExpr);
         var to         = translator.VisitAndClearBuffer(timestampToExpr);
         return(string.Format("TABLE_DATE_RANGE({0}, {1}, {2})", prefix, from, to));
     }
 }
コード例 #6
0
        public override string BuildQueryString(int depth)
        {
            var fields = keySelectors.Select(x =>
            {
                var field = BigQueryTranslateVisitor.BuildQuery(0, 0, x.Item1);
                return(field + ((x.Item2) ? " DESC" : ""));
            });

            var sb = new StringBuilder();

            sb.Append(Indent(depth));
            sb.AppendLine("ORDER BY");
            sb.Append(Indent(depth + 1));
            sb.Append(string.Join(", ", fields));

            return(sb.ToString());
        }
コード例 #7
0
        string QueryFormat()
        {
            var expr = BigQueryTranslateVisitor.BuildQuery(0, 0, tableMatchCondition);

            return(string.Format("TABLE_QUERY({0}, \"{1}\")", dataset, expr));
        }
コード例 #8
0
        public override string BuildQueryString(int depth)
        {
            var sb = new StringBuilder();

            sb.Append(Indent(depth));

            switch (joinType)
            {
            case InternalJoinType.Inner:
                sb.Append("INNER JOIN");
                break;

            case InternalJoinType.InnerEach:
                sb.Append("INNER JOIN EACH");
                break;

            case InternalJoinType.LeftOuter:
                sb.Append("LEFT OUTER JOIN");
                break;

            case InternalJoinType.LeftOuterEach:
                sb.Append("LEFT OUTER JOIN EACH");
                break;

            case InternalJoinType.RightOuter:
                sb.Append("RIGHT OUTER JOIN");
                break;

            case InternalJoinType.RightOuterEach:
                sb.Append("RIGHT OUTER JOIN EACH");
                break;

            case InternalJoinType.FullOuter:
                sb.Append("FULL OUTER JOIN");
                break;

            case InternalJoinType.FullOuterEach:
                sb.Append("FULL OUTER JOIN EACH");
                break;

            case InternalJoinType.Cross:
                sb.Append("CROSS JOIN");
                break;

            case InternalJoinType.CrossEach:
                sb.Append("CROSS JOIN EACH");
                break;

            default:
                throw new InvalidOperationException();
            }

            // table select
            if (joinTableName != null)
            {
                sb.AppendLine();
                sb.Append(Indent(depth + 1));
                sb.Append(joinTableName);
            }
            else if (joinTable != null)
            {
                sb.AppendLine();
                sb.Append(joinTable.BuildQueryStringWithoutFrom(depth));
            }
            else if (joinFlattenTable != null)
            {
                sb.Append(joinFlattenTable.BuildQueryStringWithoutFrom(depth));
            }
            else
            {
                throw new InvalidOperationException();
            }

            // alias select
            var aliasExpr = aliasSelector.Body as NewExpression;
            var aliasName = aliasExpr.Members.Last().Name;

            sb.Append(" AS " + aliasName.EscapeBq());

            // join condition
            if (joinType != InternalJoinType.Cross && joinType != InternalJoinType.CrossEach)
            {
                sb.Append(" ON ");
                var on = BigQueryTranslateVisitor.BuildQuery(0, 0, joinCondition);
                sb.Append(on);
            }

            return(sb.ToString());
        }