factbase 0.14.7 → 0.15.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +5 -5
  3. data/README.md +6 -12
  4. data/factbase.gemspec +4 -4
  5. data/lib/factbase/fact.rb +1 -1
  6. data/lib/factbase/fact_as_yaml.rb +10 -1
  7. data/lib/factbase/indexed/indexed_term.rb +6 -1
  8. data/lib/factbase/terms/ordering.rb +17 -8
  9. data/lib/factbase/version.rb +1 -1
  10. metadata +8 -88
  11. data/.0pdd.yml +0 -8
  12. data/.gitattributes +0 -7
  13. data/.github/publish-benchmark.sh +0 -24
  14. data/.github/workflows/actionlint.yml +0 -25
  15. data/.github/workflows/benchmark.yml +0 -36
  16. data/.github/workflows/codecov.yml +0 -27
  17. data/.github/workflows/copyrights.yml +0 -19
  18. data/.github/workflows/markdown-lint.yml +0 -23
  19. data/.github/workflows/pdd.yml +0 -19
  20. data/.github/workflows/rake.yml +0 -28
  21. data/.github/workflows/reuse.yml +0 -19
  22. data/.github/workflows/typos.yml +0 -19
  23. data/.github/workflows/xcop.yml +0 -19
  24. data/.github/workflows/yamllint.yml +0 -19
  25. data/.gitignore +0 -11
  26. data/.pdd +0 -7
  27. data/.rubocop.yml +0 -51
  28. data/.rultor.yml +0 -27
  29. data/benchmark/bench_factbase.rb +0 -61
  30. data/benchmark/bench_large_query.rb +0 -128
  31. data/benchmark/bench_query.rb +0 -57
  32. data/benchmark/bench_taped.rb +0 -33
  33. data/fixtures/stories/agg.yml +0 -17
  34. data/fixtures/stories/always.yml +0 -16
  35. data/fixtures/stories/and.yml +0 -19
  36. data/fixtures/stories/as.yml +0 -16
  37. data/fixtures/stories/count.yml +0 -18
  38. data/fixtures/stories/empty.yml +0 -23
  39. data/fixtures/stories/eq.yml +0 -30
  40. data/fixtures/stories/gt.yml +0 -18
  41. data/fixtures/stories/join.yml +0 -22
  42. data/fixtures/stories/max.yml +0 -14
  43. data/fixtures/stories/min.yml +0 -14
  44. data/fixtures/stories/nth.yml +0 -14
  45. data/fixtures/stories/one.yml +0 -14
  46. data/fixtures/stories/or.yml +0 -18
  47. data/fixtures/stories/sprintf.yml +0 -12
  48. data/fixtures/stories/sum.yml +0 -14
  49. data/fixtures/stories/unique.yml +0 -16
  50. data/renovate.json +0 -6
  51. data/test/factbase/cached/test_cached_factbase.rb +0 -44
  52. data/test/factbase/cached/test_cached_query.rb +0 -100
  53. data/test/factbase/indexed/test_indexed_fact.rb +0 -23
  54. data/test/factbase/indexed/test_indexed_factbase.rb +0 -96
  55. data/test/factbase/indexed/test_indexed_query.rb +0 -208
  56. data/test/factbase/indexed/test_indexed_term.rb +0 -140
  57. data/test/factbase/sync/test_sync_factbase.rb +0 -22
  58. data/test/factbase/sync/test_sync_query.rb +0 -30
  59. data/test/factbase/terms/test_aggregates.rb +0 -63
  60. data/test/factbase/terms/test_aliases.rb +0 -58
  61. data/test/factbase/terms/test_casting.rb +0 -33
  62. data/test/factbase/terms/test_debug.rb +0 -111
  63. data/test/factbase/terms/test_defn.rb +0 -48
  64. data/test/factbase/terms/test_logical.rb +0 -57
  65. data/test/factbase/terms/test_math.rb +0 -122
  66. data/test/factbase/terms/test_meta.rb +0 -70
  67. data/test/factbase/terms/test_ordering.rb +0 -28
  68. data/test/factbase/terms/test_strings.rb +0 -36
  69. data/test/factbase/terms/test_system.rb +0 -31
  70. data/test/factbase/test_accum.rb +0 -74
  71. data/test/factbase/test_churn.rb +0 -41
  72. data/test/factbase/test_fact.rb +0 -108
  73. data/test/factbase/test_fact_as_yaml.rb +0 -77
  74. data/test/factbase/test_flatten.rb +0 -28
  75. data/test/factbase/test_impatient.rb +0 -176
  76. data/test/factbase/test_inv.rb +0 -44
  77. data/test/factbase/test_logged.rb +0 -155
  78. data/test/factbase/test_pre.rb +0 -35
  79. data/test/factbase/test_query.rb +0 -445
  80. data/test/factbase/test_rules.rb +0 -113
  81. data/test/factbase/test_syntax.rb +0 -166
  82. data/test/factbase/test_tallied.rb +0 -81
  83. data/test/factbase/test_taped.rb +0 -72
  84. data/test/factbase/test_tee.rb +0 -85
  85. data/test/factbase/test_term.rb +0 -87
  86. data/test/factbase/test_to_json.rb +0 -35
  87. data/test/factbase/test_to_xml.rb +0 -89
  88. data/test/factbase/test_to_yaml.rb +0 -39
  89. data/test/test__helper.rb +0 -41
  90. data/test/test_factbase.rb +0 -509
@@ -1,19 +0,0 @@
1
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
2
- # SPDX-License-Identifier: MIT
3
- ---
4
- # yamllint disable rule:line-length
5
- name: yamllint
6
- 'on':
7
- push:
8
- branches:
9
- - master
10
- pull_request:
11
- branches:
12
- - master
13
- jobs:
14
- yamllint:
15
- timeout-minutes: 15
16
- runs-on: ubuntu-24.04
17
- steps:
18
- - uses: actions/checkout@v4
19
- - uses: ibiqlik/action-yamllint@v3
data/.gitignore DELETED
@@ -1,11 +0,0 @@
1
- .bundle/
2
- .DS_Store
3
- .idea/
4
- .yardoc/
5
- *.gem
6
- coverage/
7
- doc/
8
- node_modules/
9
- rdoc/
10
- vendor/
11
- .claude/
data/.pdd DELETED
@@ -1,7 +0,0 @@
1
- --source=.
2
- --verbose
3
- --exclude target/**/*
4
- --exclude coverage/**/*
5
- --rule min-words:20
6
- --rule min-estimate:15
7
- --rule max-estimate:90
data/.rubocop.yml DELETED
@@ -1,51 +0,0 @@
1
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
2
- # SPDX-License-Identifier: MIT
3
- ---
4
- AllCops:
5
- Exclude:
6
- - 'bin/**/*'
7
- - 'assets/**/*'
8
- - 'vendor/**/**'
9
- DisplayCopNames: true
10
- TargetRubyVersion: 3.2
11
- SuggestExtensions: false
12
- NewCops: enable
13
- plugins:
14
- - rubocop-minitest
15
- - rubocop-performance
16
- - rubocop-rake
17
- Naming/PredicateMethod:
18
- Enabled: false
19
- Minitest/EmptyLineBeforeAssertionMethods:
20
- Enabled: false
21
- Gemspec/RequiredRubyVersion:
22
- Enabled: false
23
- Metrics/MethodLength:
24
- Enabled: false
25
- Metrics/ModuleLength:
26
- Enabled: false
27
- Style/ClassAndModuleChildren:
28
- Enabled: false
29
- Layout/MultilineMethodCallIndentation:
30
- Enabled: false
31
- Metrics/AbcSize:
32
- Enabled: false
33
- Metrics/BlockLength:
34
- Max: 50
35
- Metrics/CyclomaticComplexity:
36
- Max: 100
37
- Metrics/PerceivedComplexity:
38
- Max: 100
39
- Metrics/ClassLength:
40
- Enabled: false
41
- Layout/EmptyLineAfterGuardClause:
42
- Enabled: false
43
- Naming/MethodParameterName:
44
- MinNameLength: 2
45
- Layout/EndOfLine:
46
- EnforcedStyle: lf
47
- Security/MarshalLoad:
48
- Enabled: false
49
- Layout/MultilineAssignmentLayout:
50
- Enabled: true
51
- require: []
data/.rultor.yml DELETED
@@ -1,27 +0,0 @@
1
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
2
- # SPDX-License-Identifier: MIT
3
- ---
4
- # yamllint disable rule:line-length
5
- docker:
6
- image: yegor256/ruby
7
- assets:
8
- rubygems.yml: yegor256/home#assets/rubygems.yml
9
- install: |
10
- pdd -f /dev/null
11
- bundle install --no-color
12
- release:
13
- pre: false
14
- script: |-
15
- set -x
16
- [[ "${tag}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] || exit -1
17
- bundle exec rake
18
- rm -rf *.gem
19
- sed -i "s/0\.0\.0/${tag}/g" lib/factbase/version.rb
20
- git add lib/factbase/version.rb
21
- git commit -m "version set to ${tag}"
22
- gem build factbase.gemspec
23
- chmod 0600 ../rubygems.yml
24
- gem push *.gem --config-file ../rubygems.yml
25
- merge:
26
- script: |-
27
- bundle exec rake
@@ -1,61 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
4
- # SPDX-License-Identifier: MIT
5
-
6
- require_relative '../lib/factbase'
7
-
8
- def bench_factbase(bmk, fb)
9
- total = 20_000
10
- bmk.report("insert #{total} facts") do
11
- total.times do
12
- fact = fb.insert
13
- fact.foo = rand(0.0..100.0).round(3)
14
- fact.bar = rand(100..300)
15
- end
16
- end
17
-
18
- bin = nil
19
- bmk.report("export #{total} facts") do
20
- bin = fb.export
21
- end
22
- bmk.report("import #{bin.size} bytes (#{total} facts)") do
23
- fb2 = Factbase.new
24
- fb2.import(bin)
25
- end
26
-
27
- actions = 10
28
- bmk.report("insert #{actions} facts") do
29
- fb.txn do |fbt|
30
- actions.times do
31
- fbt.insert.z = rand(0..100)
32
- end
33
- end
34
- end
35
- bmk.report("query #{actions} times w/txn") do
36
- fb.txn do |fbt|
37
- actions.times do |i|
38
- fbt.query("(gt foo #{i})").each.to_a.each
39
- end
40
- end
41
- end
42
- bmk.report("query #{actions} times w/o txn") do
43
- actions.times do |i|
44
- fb.query("(gt foo #{i})").each.to_a.each
45
- end
46
- end
47
- bmk.report("modify #{actions} attrs w/txn") do
48
- fb.txn do |fbt|
49
- actions.times do |i|
50
- fbt.query("(gt foo #{i})").each.to_a.first.bar = 55
51
- end
52
- end
53
- end
54
- bmk.report("delete #{actions} facts w/txn") do
55
- fb.txn do |fbt|
56
- actions.times do |i|
57
- fbt.query("(gt foo #{100 - i})").delete!
58
- end
59
- end
60
- end
61
- end
@@ -1,128 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
4
- # SPDX-License-Identifier: MIT
5
-
6
- require_relative '../lib/factbase'
7
- require_relative '../lib/factbase/logged'
8
-
9
- def bench_large_query(bmk, fb)
10
- total = 200
11
- repo = 'foo'
12
- total.times do |i|
13
- f = fb.insert
14
- f.id = i
15
- f.where = 'github'
16
- f.what = 'issue-was-closed'
17
- f.who = 444
18
- f.when = Time.now - (i * rand(1_000..100_000))
19
- f.issue = i
20
- f.repository = repo
21
- end
22
- total.times do |i|
23
- f = fb.insert
24
- f.id = i + total
25
- f.where = 'github'
26
- f.what = 'label-was-attached'
27
- f.when = Time.now - (i * rand(1_000..100_000))
28
- f.issue = i
29
- f.repository = repo
30
- f.label = 'bug'
31
- end
32
- total.times do |i|
33
- f = fb.insert
34
- f.id = i + (total * 2)
35
- f.where = 'github'
36
- f.what = 'issue-was-opened'
37
- f.who = 555
38
- f.when = Time.now - (i * rand(1_000..100_000))
39
- f.issue = i
40
- f.repository = repo
41
- end
42
- total.times do |i|
43
- f = fb.insert
44
- f.id = i + (total * 3)
45
- f.where = 'github'
46
- f.what = 'issue-was-assigned'
47
- f.who = 666
48
- f.when = Time.now - (i * rand(1_000..100_000))
49
- f.issue = i
50
- f.repository = repo
51
- end
52
-
53
- q = "(and
54
- (eq what 'issue-was-closed')
55
- (exists where)
56
- (exists who)
57
- (exists when)
58
- (exists issue)
59
- (exists repository)
60
- (join 'label' (and
61
- (eq what 'label-was-attached')
62
- (eq issue $issue)
63
- (eq where $where)
64
- (eq repository $repository)
65
- (or (eq label 'bug') (eq label 'enhancement') (eq label 'question'))))
66
- (exists label)
67
- (join 'opened_when<=when,opener<=who' (and
68
- (eq what 'issue-was-opened')
69
- (eq where $where)
70
- (eq issue $issue)
71
- (eq repository $repository)))
72
- (exists opener)
73
- (join 'assigned_when<=when,assigner<=who' (and
74
- (eq what 'issue-was-assigned')
75
- (eq where $where)
76
- (eq issue $issue)
77
- (eq repository $repository)))
78
- (exists assigner)
79
- (as seconds (to_integer (minus when assigned_when)))
80
- (as closer who)
81
- (as who assigner)
82
- (empty (and
83
- (eq what 'bug-was-resolved')
84
- (eq where $where)
85
- (eq issue $issue)
86
- (eq repository $repository))))".gsub(/\s+/, ' ')
87
-
88
- cycles = 1
89
- bmk.report("#{q[0..40]}... -> #{total}") do
90
- cycles.times do
91
- t = fb.query(q).each.to_a.size
92
- raise "Found #{t} facts, expected to find #{total}" unless t == total
93
- end
94
- end
95
- bmk.report("#{q[0..40]}... -> #{total}/txn") do
96
- cycles.times do
97
- fb.txn do |fbt|
98
- t = fbt.query(q).each.to_a.size
99
- raise "Found #{t} facts, expected to find #{total}" unless t == total
100
- end
101
- end
102
- end
103
-
104
- total.times do |i|
105
- f = fb.insert
106
- f.id = i
107
- f.where = 'github'
108
- f.what = 'bug-was-resolved'
109
- f.who = 444
110
- f.when = Time.now - (i * rand(1_000..100_000))
111
- f.issue = i
112
- f.repository = repo
113
- end
114
- bmk.report("#{q[0..40]}... -> zero") do
115
- cycles.times do
116
- t = fb.query(q).each.to_a.size
117
- raise "Found #{t} facts, expected to find nothing" unless t.zero?
118
- end
119
- end
120
- bmk.report("#{q[0..40]}... -> zero/txn") do
121
- cycles.times do
122
- fb.txn do |fbt|
123
- t = fbt.query(q).each.to_a.size
124
- raise "Found #{t} facts, expected to find nothing" unless t.zero?
125
- end
126
- end
127
- end
128
- end
@@ -1,57 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
4
- # SPDX-License-Identifier: MIT
5
-
6
- require 'ellipsized'
7
- require 'timeout'
8
- require_relative '../lib/factbase'
9
-
10
- def bench_query(bmk, fb)
11
- total = 20_000
12
- total.times do |i|
13
- f = fb.insert
14
- f.what = 'foo'
15
- f.where = 'github'
16
- f.id = i
17
- f.title = "Object Thinking #{i}"
18
- f.time = Time.now.iso8601
19
- f.cost = rand(1..100)
20
- f.foo = rand(0.0..100.0).round(3)
21
- f.bar = rand(100..300)
22
- f.blue = 1 if rand > 0.5
23
- f.seenBy = "User#{i}" if i.even?
24
- f.zzz = "Extra#{i}" if (i % 10).zero?
25
- end
26
-
27
- runs = 3
28
- [
29
- '(gt time \'2024-03-23T03:21:43Z\')',
30
- '(gt cost 50)',
31
- '(eq title \'Object Thinking 5000\')',
32
- '(and (eq foo 42.998) (or (gt bar 200) (absent zzz)))',
33
- '(and (exists foo) (not (exists blue)))',
34
- '(eq id (agg (always) (max id)))',
35
- '(join "c<=cost,b<=bar" (eq id (agg (always) (max id))))',
36
- '(and
37
- (eq what "foo")
38
- (join "w<=what"
39
- (and
40
- (eq id $id)
41
- (eq what "foo")
42
- (eq where "github")))
43
- (assert "has it" (one id)))'
44
- ].each do |q|
45
- bmk.report(q.tr("\n", ' ').gsub(/\s+/, ' ').ellipsized(50, :right)) do
46
- Timeout.timeout(runs * 3) do
47
- runs.times do
48
- fb.query(q).each.to_a
49
- end
50
- end
51
- end
52
- end
53
-
54
- bmk.report('delete!') do
55
- fb.query('(gt foo 50)').delete!
56
- end
57
- end
@@ -1,33 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
4
- # SPDX-License-Identifier: MIT
5
-
6
- require_relative '../lib/factbase'
7
- require_relative '../lib/factbase/taped'
8
-
9
- def bench_taped(bmk, _fb)
10
- maps = []
11
- taped = Factbase::Taped.new(maps)
12
-
13
- cycles = 50_000
14
- bmk.report("Taped.append() x#{cycles}") do
15
- cycles.times do
16
- taped << { foo: rand(0..100) }
17
- end
18
- end
19
-
20
- cycles /= 400
21
- bmk.report("Taped.each() x#{cycles}") do
22
- cycles.times do
23
- taped.each.to_a
24
- end
25
- end
26
-
27
- cycles *= 3
28
- bmk.report("Taped.delete_if() x#{cycles}") do
29
- cycles.times do
30
- taped.delete_if { |m| m[:foo] < 50 }
31
- end
32
- end
33
- end
@@ -1,17 +0,0 @@
1
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
2
- # SPDX-License-Identifier: MIT
3
- ---
4
- facts:
5
- - name: Jeff
6
- dob: 1979
7
- - name: Walter
8
- dob: 1976
9
- - name: Maude
10
- dob: 1983
11
- queries:
12
- - query: (agg (lt dob 1980) (max dob))
13
- one: 1979
14
- - query: (agg (always) (min dob))
15
- one: 1976
16
- - query: (agg (and (eq name "Jeff") (lt dob 2025)) (min dob))
17
- one: 1979
@@ -1,16 +0,0 @@
1
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
2
- # SPDX-License-Identifier: MIT
3
- ---
4
- # yamllint disable rule:line-length
5
- facts:
6
- - name: Jeff Lebowski
7
- age: 41
8
- - name: Walter Sobchak
9
- age: 45
10
- - name: Maude Lebowski
11
- age: 31
12
- queries:
13
- - query: (always)
14
- size: 3
15
- - query: (not (always))
16
- size: 0
@@ -1,19 +0,0 @@
1
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
2
- # SPDX-License-Identifier: MIT
3
- ---
4
- # yamllint disable rule:line-length
5
- facts:
6
- - name: Jeff
7
- age: 41
8
- movie: Big Lebowski
9
- - name: Walter
10
- age: 43
11
- friend: Donny
12
- movie: Big Lebowski
13
- queries:
14
- - query: (and (eq movie "Big Lebowski") (exists age) (not (exists friend)))
15
- size: 1
16
- - query: (and (exists age) (not (exists foo)))
17
- size: 2
18
- - query: (and (exists age) (exists foo))
19
- size: 0
@@ -1,16 +0,0 @@
1
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
2
- # SPDX-License-Identifier: MIT
3
- ---
4
- # yamllint disable rule:line-length
5
- facts:
6
- - name: Jeff
7
- dob: 1979
8
- - name: Walter
9
- dob: 1976
10
- - name: Maude
11
- dob: 1983
12
- queries:
13
- - query: (as age (minus 2025 dob))
14
- size: 3
15
- - query: (as gender "m/f")
16
- size: 3
@@ -1,18 +0,0 @@
1
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
2
- # SPDX-License-Identifier: MIT
3
- ---
4
- # yamllint disable rule:line-length
5
- facts:
6
- - name: Jeff
7
- age: 41
8
- - name: Walter
9
- age: 45
10
- - name: Maude
11
- age: 31
12
- queries:
13
- - query: (count)
14
- one: 3
15
- - query: (agg (eq name "Jeff") (count))
16
- one: 1
17
- - query: (agg (gt age 40) (count))
18
- one: 2
@@ -1,23 +0,0 @@
1
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
2
- # SPDX-License-Identifier: MIT
3
- ---
4
- # yamllint disable rule:line-length
5
- facts:
6
- - man: Jeff
7
- wife: Sarah
8
- - man: Walter
9
- wife: Lucy
10
- - man: Donny
11
- wife: Nicole
12
- - man: Peter
13
- wife: Dorah
14
- - woman: Lucy
15
- - woman: Nicole
16
- - woman: Dorah
17
- queries:
18
- - query: (and (exists man) (not (empty (and (exists woman) (eq woman $wife)))))
19
- size: 3
20
- - query: (and (exists man) (empty (and (exists woman) (eq woman $wife))))
21
- size: 1
22
- - query: (empty (eq woman $woman))
23
- size: 4
@@ -1,30 +0,0 @@
1
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
2
- # SPDX-License-Identifier: MIT
3
- ---
4
- # yamllint disable rule:line-length
5
- facts:
6
- - foo: 42
7
- bar: 33
8
- - name: Jeff Lebowski
9
- age: 41
10
- - name: Maude
11
- friends: [Jeff, Donny]
12
- queries:
13
- - query: (eq foo 42)
14
- size: 1
15
- - query: (not (eq foo 42))
16
- size: 2
17
- - query: (eq foo "42")
18
- size: 0
19
- - query: (not (eq foo "42"))
20
- size: 3
21
- - query: (eq foo 10)
22
- size: 0
23
- - query: (eq friends "Jeff")
24
- size: 1
25
- - query: (eq friends "Donny")
26
- size: 1
27
- - query: (eq name "Jeff Lebowski")
28
- size: 1
29
- - query: (eq bar "Hello")
30
- size: 0
@@ -1,18 +0,0 @@
1
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
2
- # SPDX-License-Identifier: MIT
3
- ---
4
- # yamllint disable rule:line-length
5
- facts:
6
- - name: Jeff Lebowski
7
- age: 41
8
- - name: Walter Sobchak
9
- age: 45
10
- - name: Maude Lebowski
11
- age: 31
12
- queries:
13
- - query: (gt age 40)
14
- size: 2
15
- - query: (not (gt age 40))
16
- size: 1
17
- - query: (and (gt age 30) (matches name "^M.*$"))
18
- size: 1
@@ -1,22 +0,0 @@
1
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
2
- # SPDX-License-Identifier: MIT
3
- ---
4
- # yamllint disable rule:line-length
5
- facts:
6
- - name: Jeff
7
- - name: Walter
8
- - name: Maude
9
- - person: Jeff
10
- age: 41
11
- - person: Walter
12
- age: 45
13
- queries:
14
- - query: |
15
- (and
16
- (join 'age<=age' (eq person $name))
17
- (exists age))
18
- size: 4
19
- - query: (and (join 'age' (eq person $name)) (exists age))
20
- size: 4
21
- - query: (and (join 'x<=age' (eq age (agg (exists person) (max age)))) (eq x 45))
22
- size: 5
@@ -1,14 +0,0 @@
1
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
2
- # SPDX-License-Identifier: MIT
3
- ---
4
- # yamllint disable rule:line-length
5
- facts:
6
- - name: Jeff
7
- age: 41
8
- - name: Walter
9
- age: 45
10
- - name: Maude
11
- age: 31
12
- queries:
13
- - query: (max age)
14
- one: 45
@@ -1,14 +0,0 @@
1
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
2
- # SPDX-License-Identifier: MIT
3
- ---
4
- # yamllint disable rule:line-length
5
- facts:
6
- - name: Jeff Lebowski
7
- age: 41
8
- - name: Walter Sobchak
9
- age: 45
10
- - name: Maude Lebowski
11
- age: 31
12
- queries:
13
- - query: (min age)
14
- one: 31
@@ -1,14 +0,0 @@
1
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
2
- # SPDX-License-Identifier: MIT
3
- ---
4
- # yamllint disable rule:line-length
5
- facts:
6
- - name: Jeff
7
- cities: [LA, SF]
8
- - name: Walter
9
- cities: [LA, SF, NYC]
10
- queries:
11
- - query: (eq "NYC" (agg (always) (nth 0 cities)))
12
- size: 0
13
- - query: (eq "NYC" (agg (always) (nth 1 cities)))
14
- size: 2
@@ -1,14 +0,0 @@
1
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
2
- # SPDX-License-Identifier: MIT
3
- ---
4
- # yamllint disable rule:line-length
5
- facts:
6
- - name: Jeff
7
- friends: [Walter, Donny, Maude]
8
- - name: Walter
9
- friends: Donny
10
- - name: Donny
11
- friends: Walter
12
- queries:
13
- - query: (one friends)
14
- size: 2
@@ -1,18 +0,0 @@
1
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
2
- # SPDX-License-Identifier: MIT
3
- ---
4
- # yamllint disable rule:line-length
5
- facts:
6
- - name: BMW
7
- price: 5600
8
- - name: Ford
9
- price: 3200
10
- owner: Jeff
11
- - name: Toyota
12
- price: 9800
13
- owners: [Jeff, Walter]
14
- queries:
15
- - query: (or (eq price 5600) (gt price 6000))
16
- size: 2
17
- - query: (or (eq owner "Jeff") (eq owners "Walter"))
18
- size: 2
@@ -1,12 +0,0 @@
1
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
2
- # SPDX-License-Identifier: MIT
3
- ---
4
- # yamllint disable rule:line-length
5
- facts:
6
- - name: Jeff
7
- age: 41
8
- queries:
9
- - query: (sprintf "Hello, %s!" "world")
10
- one: "Hello, world!"
11
- - query: (sprintf "Hello, %s!" (agg (eq age 41) (first name)))
12
- one: "Hello, Jeff!"