private void WriteSelectExpression(ParserWriter writer, APSqlExpr selectExpr) { if (selectExpr is APSqlAggregationExpr) { APSqlAggregationExpr expr = selectExpr as APSqlAggregationExpr; writer.Write(expr.AggregationType.ToString()); writer.Write("("); if (expr.SelectMode == APSqlSelectMode.DISTINCT) { writer.Write("DISTINCT"); } if (expr.RowSelectExpr is APSqlAsteriskExpr) { writer.Write("*"); } else { WriteSelectExpression(writer, expr.RowSelectExpr); } writer.Write(")"); } else if (selectExpr is APSqlDateGroupExpr) { APSqlDateGroupExpr expr = selectExpr as APSqlDateGroupExpr; string datepart = ""; switch (expr.DateGroupMode) { case APSqlDateGroupMode.Day: datepart = "yyyy-mm-dd"; break; case APSqlDateGroupMode.Week: datepart = "yyyy-IW"; break; case APSqlDateGroupMode.Month: datepart = "yyyy-mm"; break; case APSqlDateGroupMode.Quarter: datepart = "yyyy-Q"; break; case APSqlDateGroupMode.Year: datepart = "yyyy"; break; } writer.Write("to_char("); WriteSelectExpression(writer, expr.RawExpr); writer.Write(", '{0}')", datepart); } else { writer.Write(selectExpr.SelectExpr); } }
private void WriteSelectExpression(ParserWriter writer, APSqlExpr selectExpr) { if (selectExpr is APSqlAggregationExpr) { APSqlAggregationExpr expr = selectExpr as APSqlAggregationExpr; writer.Write(expr.AggregationType.ToString()); writer.Write("("); if (expr.SelectMode == APSqlSelectMode.DISTINCT) { writer.Write("DISTINCT"); } if (expr.RowSelectExpr is APSqlAsteriskExpr) { writer.Write("*"); } else { WriteSelectExpression(writer, expr.RowSelectExpr); } writer.Write(")"); } else if (selectExpr is APSqlDateGroupExpr) { APSqlDateGroupExpr expr = selectExpr as APSqlDateGroupExpr; string datepart = ""; switch (expr.DateGroupMode) { case APSqlDateGroupMode.Day: datepart = "dd"; break; case APSqlDateGroupMode.Week: datepart = "wk"; break; case APSqlDateGroupMode.Month: datepart = "mm"; break; case APSqlDateGroupMode.Quarter: datepart = "qq"; break; case APSqlDateGroupMode.Year: datepart = "yy"; break; } writer.Write(String.Format("DATEADD( {0}, DATEDIFF( {0}, 0,", datepart)); WriteSelectExpression(writer, expr.RawExpr); writer.Write("), 0 )"); } else { writer.Write(selectExpr.SelectExpr); } }