Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
H
hivemind
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Deploy
Releases
Package registry
Container Registry
Model registry
Operate
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
hive
hivemind
Commits
ae436d8d
Commit
ae436d8d
authored
4 years ago
by
Bartek Wrona
Browse files
Options
Downloads
Plain Diff
Merge branch 'dk-database-api-001' into 'develop'
Database api fixes See merge request
!103
parents
51060b19
0051ca86
No related branches found
No related tags found
5 merge requests
!456
Release candidate v1 24
,
!230
Setup monitoring with pghero
,
!138
Small typos fixed
,
!135
Enable postgres monitoring on CI server
,
!103
Database api fixes
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
hive/db/schema.py
+29
-20
29 additions, 20 deletions
hive/db/schema.py
hive/server/common/helpers.py
+20
-0
20 additions, 0 deletions
hive/server/common/helpers.py
hive/server/database_api/methods.py
+22
-1
22 additions, 1 deletion
hive/server/database_api/methods.py
with
71 additions
and
21 deletions
hive/db/schema.py
+
29
−
20
View file @
ae436d8d
...
...
@@ -767,21 +767,31 @@ def setup(db):
db
.
query_no_return
(
sql
)
sql
=
"""
DROP FUNCTION IF EXISTS find_comment_id(character varying, character varying)
DROP FUNCTION IF EXISTS find_comment_id(character varying, character varying
, boolean
)
;
CREATE OR REPLACE FUNCTION find_comment_id(
in _author hive_accounts.name%TYPE,
in _permlink hive_permlink_data.permlink%TYPE)
RETURNS INT AS
in _permlink hive_permlink_data.permlink%TYPE,
in _check boolean)
RETURNS INT
LANGUAGE
'
plpgsql
'
AS
$function$
SELECT COALESCE( (SELECT hp.id
FROM hive_posts hp
JOIN hive_accounts ha ON ha.id = hp.author_id
JOIN hive_permlink_data hpd ON hpd.id = hp.permlink_id
WHERE ha.name = _author AND hpd.permlink = _permlink AND hp.counter_deleted = 0
), 0 );
DECLARE
post_id INT;
BEGIN
SELECT INTO post_id COALESCE( (SELECT hp.id
FROM hive_posts hp
JOIN hive_accounts ha ON ha.id = hp.author_id
JOIN hive_permlink_data hpd ON hpd.id = hp.permlink_id
WHERE ha.name = _author AND hpd.permlink = _permlink AND hp.counter_deleted = 0
), 0 );
IF _check AND (_author <>
''
OR _permlink <>
''
) AND post_id = 0 THEN
RAISE EXCEPTION
'
Post/comment %/% does not exist
'
, _author, _permlink;
END IF;
RETURN post_id;
END
$function$
LANGUAGE sql
;
"""
db
.
query_no_return
(
sql
)
...
...
@@ -845,7 +855,7 @@ def setup(db):
DECLARE
__post_id INT;
BEGIN
__post_id = find_comment_id(_author,_permlink);
__post_id = find_comment_id(_author,_permlink
, False
);
RETURN QUERY
SELECT
hp.id, hp.community_id, hp.author, hp.permlink, hp.title, hp.body,
...
...
@@ -925,8 +935,8 @@ def setup(db):
__root_id INT;
__post_id INT;
BEGIN
__root_id = find_comment_id(_root_author,_root_permlink);
__post_id = find_comment_id(_start_post_author,_start_post_permlink);
__root_id = find_comment_id(_root_author,
_root_permlink
, True
);
__post_id = find_comment_id(_start_post_author,
_start_post_permlink
, True
);
RETURN QUERY
SELECT
hp.id, hp.community_id, hp.author, hp.permlink, hp.title, hp.body,
...
...
@@ -965,11 +975,10 @@ def setup(db):
in _limit INT)
RETURNS SETOF database_api_post
LANGUAGE sql
COST 100
STABLE
ROWS 1000
AS $
BODY
$
AS $
function
$
SELECT
hp.id, hp.community_id, hp.author, hp.permlink, hp.title, hp.body,
hp.category, hp.depth, hp.promoted, hp.payout, hp.last_payout_at, hp.cashout_time, hp.is_paidout,
...
...
@@ -988,7 +997,7 @@ def setup(db):
WHERE
h.parent_author > _parent_author OR
h.parent_author = _parent_author AND ( h.parent_permlink_or_category > _parent_permlink OR
h.parent_permlink_or_category = _parent_permlink AND h.id >= find_comment_id(_start_post_author,_start_post_permlink) )
h.parent_permlink_or_category = _parent_permlink AND h.id >= find_comment_id(_start_post_author,
_start_post_permlink
, True
) )
ORDER BY
h.parent_author ASC,
h.parent_permlink_or_category ASC,
...
...
@@ -999,8 +1008,8 @@ def setup(db):
WHERE
NOT hp.is_muted
;
$
BODY$;
;
$
function$
;
DROP FUNCTION IF EXISTS list_comments_by_last_update(character varying, timestamp, character varying, character varying, int)
;
...
...
@@ -1016,7 +1025,7 @@ def setup(db):
DECLARE
__post_id INT;
BEGIN
__post_id = find_comment_id(_start_post_author,_start_post_permlink);
__post_id = find_comment_id(_start_post_author,
_start_post_permlink
, True
);
RETURN QUERY
SELECT
hp.id, hp.community_id, hp.author, hp.permlink, hp.title, hp.body,
...
...
@@ -1060,7 +1069,7 @@ def setup(db):
DECLARE
__post_id INT;
BEGIN
__post_id = find_comment_id(_start_post_author,_start_post_permlink);
__post_id = find_comment_id(_start_post_author,
_start_post_permlink
, True
);
RETURN QUERY
SELECT
hp.id, hp.community_id, hp.author, hp.permlink, hp.title, hp.body,
...
...
This diff is collapsed.
Click to expand it.
hive/server/common/helpers.py
+
20
−
0
View file @
ae436d8d
...
...
@@ -115,3 +115,23 @@ def valid_follow_type(follow_type: str):
"""
Ensure follow type is valid steemd type.
"""
assert
follow_type
in
[
'
blog
'
,
'
ignore
'
],
'
invalid follow_type `%s`
'
%
follow_type
return
follow_type
def
valid_date
(
date
,
allow_empty
=
False
):
"""
Ensure that date is in correct format
"""
if
not
date
:
assert
allow_empty
,
'
Date is blank
'
check_date
=
False
# check format "%Y-%m-%d %H:%M:%S"
try
:
check_date
=
(
date
==
datetime
.
datetime
.
strptime
(
date
,
"
%Y-%m-%d %H:%M:%S
"
).
strftime
(
'
%Y-%m-%d %H:%M%S
'
))
except
ValueError
:
check_date
=
False
# if check failed for format above try another format
# check format "%Y-%m-%dT%H:%M:%S"
if
not
check_date
:
try
:
check_date
=
(
date
==
datetime
.
datetime
.
strptime
(
date
,
"
%Y-%m-%dT%H:%M:%S
"
).
strftime
(
'
%Y-%m-%dT%H:%M:%S
'
))
except
ValueError
:
pass
assert
check_date
,
"
Date should be in format Y-m-d H:M:S or Y-m-dTH:M:S
"
This diff is collapsed.
Click to expand it.
hive/server/database_api/methods.py
+
22
−
1
View file @
ae436d8d
# pylint: disable=too-many-arguments,line-too-long,too-many-lines
from
enum
import
Enum
from
hive.server.common.helpers
import
return_error_info
,
valid_limit
,
valid_account
,
valid_permlink
from
hive.server.common.helpers
import
return_error_info
,
valid_limit
,
valid_account
,
valid_permlink
,
valid_date
from
hive.server.database_api.objects
import
database_post_object
from
hive.utils.normalize
import
rep_to_raw
,
number_to_json_value
,
time_string_with_t
...
...
@@ -20,48 +20,69 @@ async def list_comments(context, start: list, limit: int, order: str):
if
order
==
'
by_cashout_time
'
:
assert
len
(
start
)
==
3
,
"
Expecting three arguments
"
cashout_time
=
start
[
0
]
valid_date
(
cashout_time
)
if
cashout_time
[
0
:
4
]
==
'
1969
'
:
cashout_time
=
"
infinity
"
author
=
start
[
1
]
valid_account
(
author
,
allow_empty
=
True
)
permlink
=
start
[
2
]
valid_permlink
(
permlink
,
allow_empty
=
True
)
sql
=
"
SELECT * FROM list_comments_by_cashout_time(:cashout_time, :author, :permlink, :limit)
"
result
=
await
db
.
query_all
(
sql
,
cashout_time
=
cashout_time
,
author
=
author
,
permlink
=
permlink
,
limit
=
limit
)
elif
order
==
'
by_permlink
'
:
assert
len
(
start
)
==
2
,
"
Expecting two arguments
"
author
=
start
[
0
]
valid_account
(
author
,
allow_empty
=
True
)
permlink
=
start
[
1
]
valid_permlink
(
permlink
,
allow_empty
=
True
)
sql
=
"
SELECT * FROM list_comments_by_permlink(:author, :permlink, :limit)
"
result
=
await
db
.
query_all
(
sql
,
author
=
author
,
permlink
=
permlink
,
limit
=
limit
)
elif
order
==
'
by_root
'
:
assert
len
(
start
)
==
4
,
"
Expecting 4 arguments
"
root_author
=
start
[
0
]
valid_account
(
root_author
,
allow_empty
=
True
)
root_permlink
=
start
[
1
]
valid_permlink
(
root_permlink
,
allow_empty
=
True
)
start_post_author
=
start
[
2
]
valid_account
(
start_post_author
,
allow_empty
=
True
)
start_post_permlink
=
start
[
3
]
valid_permlink
(
start_post_permlink
,
allow_empty
=
True
)
sql
=
"
SELECT * FROM list_comments_by_root(:root_author, :root_permlink, :start_post_author, :start_post_permlink, :limit)
"
result
=
await
db
.
query_all
(
sql
,
root_author
=
root_author
,
root_permlink
=
root_permlink
,
start_post_author
=
start_post_author
,
start_post_permlink
=
start_post_permlink
,
limit
=
limit
)
elif
order
==
'
by_parent
'
:
assert
len
(
start
)
==
4
,
"
Expecting 4 arguments
"
parent_author
=
start
[
0
]
valid_account
(
parent_author
,
allow_empty
=
True
)
parent_permlink
=
start
[
1
]
valid_permlink
(
parent_permlink
,
allow_empty
=
True
)
start_post_author
=
start
[
2
]
valid_account
(
start_post_author
,
allow_empty
=
True
)
start_post_permlink
=
start
[
3
]
valid_permlink
(
start_post_permlink
,
allow_empty
=
True
)
sql
=
"
SELECT * FROM list_comments_by_parent(:parent_author, :parent_permlink, :start_post_author, :start_post_permlink, :limit)
"
result
=
await
db
.
query_all
(
sql
,
parent_author
=
parent_author
,
parent_permlink
=
parent_permlink
,
start_post_author
=
start_post_author
,
start_post_permlink
=
start_post_permlink
,
limit
=
limit
)
elif
order
==
'
by_last_update
'
:
assert
len
(
start
)
==
4
,
"
Expecting 4 arguments
"
parent_author
=
start
[
0
]
valid_account
(
parent_author
,
allow_empty
=
True
)
updated_at
=
start
[
1
]
valid_date
(
updated_at
)
start_post_author
=
start
[
2
]
valid_account
(
start_post_author
,
allow_empty
=
True
)
start_post_permlink
=
start
[
3
]
valid_permlink
(
start_post_permlink
,
allow_empty
=
True
)
sql
=
"
SELECT * FROM list_comments_by_last_update(:parent_author, :updated_at, :start_post_author, :start_post_permlink, :limit)
"
result
=
await
db
.
query_all
(
sql
,
parent_author
=
parent_author
,
updated_at
=
updated_at
,
start_post_author
=
start_post_author
,
start_post_permlink
=
start_post_permlink
,
limit
=
limit
)
elif
order
==
'
by_author_last_update
'
:
assert
len
(
start
)
==
4
,
"
Expecting 4 arguments
"
author
=
start
[
0
]
valid_account
(
author
,
allow_empty
=
True
)
updated_at
=
start
[
1
]
valid_date
(
updated_at
)
start_post_author
=
start
[
2
]
valid_account
(
start_post_author
,
allow_empty
=
True
)
start_post_permlink
=
start
[
3
]
valid_permlink
(
start_post_permlink
,
allow_empty
=
True
)
sql
=
"
SELECT * FROM list_comments_by_author_last_update(:author, :updated_at, :start_post_author, :start_post_permlink, :limit)
"
result
=
await
db
.
query_all
(
sql
,
author
=
author
,
updated_at
=
updated_at
,
start_post_author
=
start_post_author
,
start_post_permlink
=
start_post_permlink
,
limit
=
limit
)
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment