with_mutually_recursive.py 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. # Copyright Materialize, Inc. and contributors. All rights reserved.
  2. #
  3. # Use of this software is governed by the Business Source License
  4. # included in the LICENSE file at the root of this repository.
  5. #
  6. # As of the Change Date specified in that file, in accordance with
  7. # the Business Source License, use of this software will be governed
  8. # by the Apache License, Version 2.0.
  9. from textwrap import dedent
  10. from materialize.checks.actions import Testdrive
  11. from materialize.checks.checks import Check
  12. class WithMutuallyRecursive(Check):
  13. def initialize(self) -> Testdrive:
  14. return Testdrive(
  15. dedent(
  16. """
  17. > CREATE MATERIALIZED VIEW wmr1 AS WITH MUTUALLY RECURSIVE (RETURN AT RECURSION LIMIT 100)
  18. foo (a int, b int) AS (SELECT 1, 2 UNION SELECT a, 7 FROM bar),
  19. bar (a int) as (SELECT a FROM foo)
  20. SELECT * FROM bar;
  21. """
  22. )
  23. )
  24. def manipulate(self) -> list[Testdrive]:
  25. return [
  26. Testdrive(dedent(s))
  27. for s in [
  28. """
  29. > CREATE DEFAULT INDEX ON wmr1;
  30. > CREATE MATERIALIZED VIEW wmr1A AS SELECT a + 1 FROM wmr1;
  31. > CREATE MATERIALIZED VIEW wmr2 AS WITH MUTUALLY RECURSIVE (ERROR AT RECURSION LIMIT 1)
  32. foo (a int, b int) AS (SELECT 1, 2 UNION SELECT a, 7 FROM bar),
  33. bar (a int) as (SELECT a FROM foo)
  34. SELECT * FROM bar;
  35. """,
  36. """
  37. > CREATE MATERIALIZED VIEW wmr2A AS SELECT a + 1 FROM wmr2;
  38. > CREATE MATERIALIZED VIEW wmr3 AS WITH MUTUALLY RECURSIVE
  39. foo (a int, b int) AS (SELECT 1, 2 UNION SELECT a, 7 FROM bar),
  40. bar (a int) as (SELECT a FROM foo)
  41. SELECT * FROM bar;
  42. """,
  43. ]
  44. ]
  45. def validate(self) -> Testdrive:
  46. return Testdrive(
  47. dedent(
  48. """
  49. > SELECT * FROM wmr1
  50. 1
  51. 1
  52. > SELECT * FROM wmr1A
  53. 2
  54. 2
  55. ! SELECT * FROM wmr2
  56. contains: Recursive query exceeded the recursion
  57. ! SELECT * FROM wmr2A
  58. contains: Recursive query exceeded the recursion
  59. > SELECT * FROM wmr3
  60. 1
  61. 1
  62. """
  63. )
  64. )