mirror of
https://github.com/perlbot/perlbuut
synced 2025-06-07 22:15:45 -04:00
Queries mostly ready, some things not working but its close
This commit is contained in:
parent
f06f3a2f69
commit
e3a5ae97f5
1 changed files with 55 additions and 11 deletions
|
@ -429,7 +429,7 @@ sub get_fact_revisions ($self, $subject, $name, $said) {
|
||||||
|
|
||||||
# TODO this query needs to be rewritten
|
# TODO this query needs to be rewritten
|
||||||
my $revisions = $dbh->selectall_arrayref(
|
my $revisions = $dbh->selectall_arrayref(
|
||||||
"SELECT factoid_id, subject, copula, predicate, author, compose_macro, protected
|
"SELECT factoid_id, subject, copula, predicate, author, compose_macro, protected, server, namespace
|
||||||
FROM factoid
|
FROM factoid
|
||||||
WHERE original_subject = ?
|
WHERE original_subject = ?
|
||||||
ORDER BY modified_time DESC
|
ORDER BY modified_time DESC
|
||||||
|
@ -672,12 +672,34 @@ sub _db_get_protect ($self, $subj, $server, $namespace) {
|
||||||
my $dbh = $self->dbh;
|
my $dbh = $self->dbh;
|
||||||
my $prot = (
|
my $prot = (
|
||||||
$dbh->selectrow_array("
|
$dbh->selectrow_array("
|
||||||
SELECT protected
|
WITH RECURSIVE factoid_lookup_order_inner (depth, namespace, server, alias_namespace, alias_server, parent_namespace, parent_server, recursive, gen_server, gen_namespace) AS (
|
||||||
FROM factoid
|
SELECT 0 AS depth, namespace, server, alias_namespace, alias_server, parent_namespace, parent_server, recursive, generated_server, generated_namespace
|
||||||
|
FROM factoid_config
|
||||||
|
WHERE namespace = ? AND server = ?
|
||||||
|
UNION ALL
|
||||||
|
SELECT p.depth+1 AS depth, m.namespace, m.server, m.alias_namespace, m.alias_server, m.parent_namespace, m.parent_server, m.recursive, m.generated_server, m.generated_namespace
|
||||||
|
FROM factoid_config m
|
||||||
|
INNER JOIN factoid_lookup_order_inner p
|
||||||
|
ON m.namespace = p.parent_namespace AND m.server = p.parent_server AND p.recursive
|
||||||
|
),
|
||||||
|
factoid_lookup_order (depth, namespace, server, alias_namespace, alias_server, parent_namespace, parent_server, recursive, gen_server, gen_namespace) AS (
|
||||||
|
SELECT * FROM factoid_lookup_order_inner
|
||||||
|
UNION ALL
|
||||||
|
SELECT 0, '', '', NULL, NULL, NULL, NULL, false, '', '' WHERE NOT EXISTS (table factoid_lookup_order_inner)
|
||||||
|
),
|
||||||
|
get_latest_factoid (depth, factoid_id, subject, copula, predicate, author, modified_time, compose_macro, protected, original_subject, deleted, server, namespace) AS (
|
||||||
|
SELECT DISTINCT ON(lo.depth) lo.depth, factoid_id, subject, copula, predicate, author, modified_time, compose_macro, protected, original_subject, f.deleted, f.server, f.namespace
|
||||||
|
FROM factoid f
|
||||||
|
INNER JOIN factoid_lookup_order lo
|
||||||
|
ON f.generated_server = lo.gen_server
|
||||||
|
AND f.generated_namespace = lo.gen_namespace
|
||||||
WHERE original_subject = ?
|
WHERE original_subject = ?
|
||||||
ORDER BY factoid_id DESC LIMIT 1
|
ORDER BY depth ASC, factoid_id DESC
|
||||||
|
)
|
||||||
|
SELECT protected FROM get_latest_factoid WHERE NOT deleted ORDER BY depth ASC, factoid_id DESC LIMIT 1;
|
||||||
",
|
",
|
||||||
undef,
|
undef,
|
||||||
|
$namespace, $server,
|
||||||
$subj,
|
$subj,
|
||||||
)
|
)
|
||||||
)[0];
|
)[0];
|
||||||
|
@ -685,18 +707,40 @@ sub _db_get_protect ($self, $subj, $server, $namespace) {
|
||||||
return $prot;
|
return $prot;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub _db_get_fact ($self, $subj, $func, $namespace, $server) {
|
sub _db_get_fact ($self, $subj, $func, $server, $namespace) {
|
||||||
|
|
||||||
# TODO write the recursive CTE for this
|
# TODO write the recursive CTE for this
|
||||||
|
|
||||||
my $dbh = $self->dbh;
|
my $dbh = $self->dbh;
|
||||||
my $fact = $dbh->selectrow_hashref("
|
my $fact = $dbh->selectrow_hashref("
|
||||||
SELECT factoid_id, subject, copula, predicate, author, modified_time, compose_macro, protected, original_subject
|
WITH RECURSIVE factoid_lookup_order_inner (depth, namespace, server, alias_namespace, alias_server, parent_namespace, parent_server, recursive, gen_server, gen_namespace) AS (
|
||||||
FROM factoid
|
SELECT 0 AS depth, namespace, server, alias_namespace, alias_server, parent_namespace, parent_server, recursive, generated_server, generated_namespace
|
||||||
|
FROM factoid_config
|
||||||
|
WHERE namespace = ? AND server = ?
|
||||||
|
UNION ALL
|
||||||
|
SELECT p.depth+1 AS depth, m.namespace, m.server, m.alias_namespace, m.alias_server, m.parent_namespace, m.parent_server, m.recursive, m.generated_server, m.generated_namespace
|
||||||
|
FROM factoid_config m
|
||||||
|
INNER JOIN factoid_lookup_order_inner p
|
||||||
|
ON m.namespace = p.parent_namespace AND m.server = p.parent_server AND p.recursive
|
||||||
|
),
|
||||||
|
factoid_lookup_order (depth, namespace, server, alias_namespace, alias_server, parent_namespace, parent_server, recursive, gen_server, gen_namespace) AS (
|
||||||
|
SELECT * FROM factoid_lookup_order_inner
|
||||||
|
UNION ALL
|
||||||
|
SELECT 0, '', '', NULL, NULL, NULL, NULL, false, '', '' WHERE NOT EXISTS (table factoid_lookup_order_inner)
|
||||||
|
),
|
||||||
|
get_latest_factoid (depth, factoid_id, subject, copula, predicate, author, modified_time, compose_macro, protected, original_subject, deleted, server, namespace) AS (
|
||||||
|
SELECT DISTINCT ON(lo.depth) lo.depth, factoid_id, subject, copula, predicate, author, modified_time, compose_macro, protected, original_subject, f.deleted, f.server, f.namespace
|
||||||
|
FROM factoid f
|
||||||
|
INNER JOIN factoid_lookup_order lo
|
||||||
|
ON f.generated_server = lo.gen_server
|
||||||
|
AND f.generated_namespace = lo.gen_namespace
|
||||||
WHERE original_subject = ?
|
WHERE original_subject = ?
|
||||||
ORDER BY factoid_id DESC
|
ORDER BY depth ASC, factoid_id DESC
|
||||||
|
)
|
||||||
|
SELECT * FROM get_latest_factoid WHERE NOT deleted ORDER BY depth ASC, factoid_id DESC LIMIT 1;
|
||||||
",
|
",
|
||||||
undef,
|
undef,
|
||||||
|
$namespace, $server,
|
||||||
$subj,
|
$subj,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue