@@ -10429,7 +10429,7 @@
Evaluation Semantics
10429
10429
10430
10430
Values Insertion and `EXISTS`
10431
10431
10432
- The following subsections contain draft of material for a revised
10432
+ The following subsections contain draft material for a revised
10433
10433
"`exists`" operation.
10434
10434
10435
10435
@@ -10444,7 +10444,10 @@
Syntax Restriction
10444
10444
This applies to `BIND`, variables introduced by `AS` in a `SELECT` clause, variables in a `VALUES`
10445
10445
clause, and variables introduced by `AS` in `GROUP BY`.
10446
10446
10447
- Extend the "in-scope" rules to include the variables in-scope from the current row:
10447
+
10448
+ Extend the "in-scope" rules to include the possible
10449
+ variables that are in-scope for the current row:
10450
+
10448
10451
10449
10452
10450
10453
@@ -10458,10 +10461,15 @@
Syntax Restriction
10458
10461
10459
10462
10460
10463
10461
-
10462
- This restriction means that
values inserted
10463
- do not conflict with values assigned to variables within the pattern.
10464
-
10464
+
10465
+
10466
+ This restriction means that
values inserted
10467
+ do not conflict with values assigned to variables within the pattern.
10468
+
10469
+
10470
+ This operation is performed as part of query parsing.
10471
+
10472
+
10465
10473
10466
10474
10467
10475
Remapping
@@ -10486,7 +10494,7 @@
Remapping
10486
10494
F(v) = v1 if v is in PV, where v1 is a fresh variable
10487
10495
F(v) = v if v is not in PV
10488
10496
10489
- Define the Projection Expression Variable Remapping `ProjectMap(P,PV)`
10497
+ Define the Projection Expression Variable Remapping `ProjectMap(P, PV)`
10490
10498
10491
10499
ProjectMap(Project(A, PV)) = Project(A1, PV)
10492
10500
where A1 is the result of applying F
@@ -10514,39 +10522,88 @@
Remapping
10514
10522
Replacements may happen several times, depending on recursive order
10515
10523
but each time a replacement is made, the variable not used anywhere else.
10516
10524
10517
-
10518
-
10519
- A variable inside a project expression that is not in the variables projected
10520
- is not affected by the values insertion operation because it is renamed apart.
10521
-
10525
+
10526
+
10527
+
10528
+ A variable inside a project expression that is not in the variables projected
10529
+ is not affected by the values insertion operation because it is renamed apart.
10530
+
10531
+
10532
+ This operation is as part of the
translation to the SPARQL
10533
+ algebra.
10534
+
10535
+
10522
10536
10523
10537
10524
10538
Values Insertion
10539
+
10540
+ Alternative 1: rewrite the algebra during
10541
+
10542
+ to include a function that evaluates to the current row.
10543
+
10544
+
10525
10545
10526
10546
10527
- Definition: defn_valuesinsertion " name="defn_valuesinsertion ">Values Insertion
10547
+ Definition: defn_correlate " name="defn_correlate ">Values In Scope
10528
10548
10529
- Define the Values Insertion function `ValuesInsert(X, μ)`
10549
+ Define the function `BindingInScope()`.
10550
+ Evaluation of `BindingInScope()` results in a table of one row,
10551
+ being the current binding of the enclosing filter.
10530
10552
10531
- Let Table(μ) = { μ } and multiplicity( μ | Table(μ) = { μ } ) = 1
10553
+
10554
+
10532
10555
10556
+
10557
+
10558
+ Definition: Access to the current binding
10559
+
10560
+
10561
+
10562
+
10533
10563
Replace each occurence of `Y` in X where `Y` is one of
10534
10564
10535
10565
10536
10566
10537
10567
10538
- with `join(Y, Table(μ))`.
10539
-
10568
+ with `join(Y, BindingInScope())`.
10569
+
10570
+
10571
+
10572
+ where an empty basic graph pattern start any
10573
+
10574
+ It happens before the
simplification step .
10540
10575
10541
- @@ rename as ???correllate
10542
10576
10543
10577
10544
10578
10545
10579
10546
10580
Examples
10547
10581
10548
10582
10583
+
10584
+
10585
+ Alternative 2: rewrite the algebra during execution. This corresponds to the
10586
+
10587
+
10588
+
10589
+
10590
+ Definition: Values Insertion
10591
+
10592
+ Define the Values Insertion function `ValuesInsert(X, μ)`
10593
+
10594
+ Let Table(μ) = { μ } and multiplicity( μ | Table(μ) = { μ } ) = 1
10595
+
10596
+ Replace each occurence of `Y` in X where `Y` is one of
10597
+
10598
+
10599
+
10600
+
10601
+ with `join(Y, Table(μ))`.
10602
+
10603
+
10604
+
10549
10605
10606
+
10550
10607
10551
10608
Evaluation of EXISTS
10552
10609
@@ -10556,7 +10613,7 @@
Evaluation of EXISTS
10556
10613
define the Evaluation of Exists `exists(X)`
10557
10614
10558
10615
10559
- if eval( D(G), ValuesInsert (PrjMap(X), μ) )
10616
+ if eval( D(G), ValuesInScope (PrjMap(X)) , μ)
10560
10617
is a non-empty solution sequence.
10561
10618
exists(X) = false otherwise
10562
10619
0 commit comments