DiffRepository should write a test's resource file only when it is modified

Before this change, DiffRepository writes the resource file
(to xxx_actual.xml) for every test case, regardless of whether
its resources (e.g. SQL or plan) have changed. For large tests
with lots of test cases and large resource files, such as
RelOptRulesTest, that is a considerable CPU and IO cost.

After this change, DiffRepository only writes the resource
file if the resources change. So if RelOptRulesTest has 3
failures out of 500 tests, DiffRepository will write
RelOptRulesTest_actual.xml 3 times. As a result, such tests
run ~10x faster.

There are a few test methods in SqlToRelConverter test that
run 2 or 3 SQL statements that all produce the same plan.
DiffRepository regards each SQL statement as a resource, and
marks the resource file 'dirty' even though the final result
is always the same. We should fix this, but it's only a minor
impact on performance.
2 files changed
tree: 52f9e3a49ea4dee805b1f3b4838a71e1be3cd85f
  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. ubenchmark/
  29. .asf.yaml
  30. .editorconfig
  31. .gitattributes
  32. .gitignore
  33. .ratignore
  34. .travis.yml
  35. appveyor.yml
  36. build.gradle.kts
  37. gradle.properties
  38. gradlew
  39. gradlew.bat
  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 Travis Build Status CI Status AppVeyor Build 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.