[CALCITE-4334] LITERAL_AGG, an internal aggregate function that returns a constant value

LITERAL_AGG is internal, so you cannot use it from SQL. A
call to LITERAL_AGG(true) is created implicitly when you
write

  SELECT deptno, SUM(sal), true
  FROM Emp
  GROUP BY deptno

Add RelBuilder.literalAgg.

RelBuilder.aggregate now adds an aggregate function to ensure
that there is at least one field. The aggregate function is
LITERAL_AGG; thus the pseudo-query

  SELECT /* no fields */
  FROM t
  GROUP BY ()

becomes the valid query

  SELECT TRUE AS dummy
  FROM t
  GROUP BY ().

Solves that problem that an Aggregate query that uses no
columns throws AssertionError in RelFieldTrimmer.trimFields.

Add an option RelBuilder.Config.preventEmptyFieldList to
turn off the behavior we just added.

Close apache/calcite#3209
40 files changed
tree: 3638432131938203b72b2684bae84a231179c779
  1. .github/
  2. .idea/
  3. babel/
  4. bom/
  5. buildSrc/
  6. cassandra/
  7. core/
  8. druid/
  9. elasticsearch/
  10. example/
  11. file/
  12. geode/
  13. gradle/
  14. innodb/
  15. kafka/
  16. linq4j/
  17. mongodb/
  18. pig/
  19. piglet/
  20. plus/
  21. redis/
  22. release/
  23. server/
  24. site/
  25. spark/
  26. splunk/
  27. src/
  28. testkit/
  29. ubenchmark/
  30. .asf.yaml
  31. .editorconfig
  32. .gitattributes
  33. .gitignore
  34. .ratignore
  35. build.gradle.kts
  36. gradle.properties
  37. gradlew
  38. gradlew.bat
  39. Jenkinsfile
  40. LICENSE
  41. NOTICE
  42. README
  43. README.md
  44. settings.gradle.kts
  45. sqlline
  46. sqlline.bat
  47. sqlsh
  48. sqlsh.bat
README.md

Maven Central CI Status

Apache Calcite

Apache Calcite is a dynamic data management framework.

It contains many of the pieces that comprise a typical database management system but omits the storage primitives. It provides an industry standard SQL parser and validator, a customisable optimizer with pluggable rules and cost functions, logical and physical algebraic operators, various transformation algorithms from SQL to algebra (and the opposite), and many adapters for executing SQL queries over Cassandra, Druid, Elasticsearch, MongoDB, Kafka, and others, with minimal configuration.

For more details, see the home page.

The project uses JIRA for issue tracking. For further information, please see the JIRA accounts guide.