message-db 0.0.0 → 1.1.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. checksums.yaml +4 -4
  2. data/database/VERSION.txt +1 -0
  3. data/database/benchmark.sh +62 -0
  4. data/database/benchmark_get.sql +24 -0
  5. data/database/benchmark_write.sql +24 -0
  6. data/database/clear-messages.sh +26 -0
  7. data/database/extensions/pgcrypto.sql +1 -0
  8. data/database/functions/acquire-lock.sql +24 -0
  9. data/database/functions/cardinal-id.sql +18 -0
  10. data/database/functions/category.sql +10 -0
  11. data/database/functions/get-category-messages.sql +129 -0
  12. data/database/functions/get-last-stream-message.sql +37 -0
  13. data/database/functions/get-stream-messages.sql +71 -0
  14. data/database/functions/hash-64.sql +13 -0
  15. data/database/functions/id.sql +18 -0
  16. data/database/functions/is-category.sql +14 -0
  17. data/database/functions/message-store-version.sql +8 -0
  18. data/database/functions/stream-version.sql +19 -0
  19. data/database/functions/write-message.sql +73 -0
  20. data/database/indexes/messages-category.sql +7 -0
  21. data/database/indexes/messages-id.sql +5 -0
  22. data/database/indexes/messages-stream.sql +6 -0
  23. data/database/install-functions.sh +79 -0
  24. data/database/install-indexes.sh +33 -0
  25. data/database/install-privileges.sh +39 -0
  26. data/database/install-views.sh +42 -0
  27. data/database/install.sh +102 -0
  28. data/database/print-category-type-summary.sh +44 -0
  29. data/database/print-message-store-version.sh +32 -0
  30. data/database/print-messages.sh +44 -0
  31. data/database/print-stream-summary.sh +44 -0
  32. data/database/print-stream-type-summary.sh +44 -0
  33. data/database/print-type-category-summary.sh +44 -0
  34. data/database/print-type-stream-summary.sh +44 -0
  35. data/database/print-type-summary.sh +44 -0
  36. data/database/privileges/functions.sql +15 -0
  37. data/database/privileges/schema.sql +1 -0
  38. data/database/privileges/sequence.sql +1 -0
  39. data/database/privileges/table.sql +1 -0
  40. data/database/privileges/views.sql +6 -0
  41. data/database/roles/message-store.sql +7 -0
  42. data/database/schema/message-store.sql +1 -0
  43. data/database/tables/messages.sql +12 -0
  44. data/database/types/message.sql +15 -0
  45. data/database/uninstall.sh +54 -0
  46. data/database/update.sh +171 -0
  47. data/database/views/category-type-summary.sql +32 -0
  48. data/database/views/stream-summary.sql +28 -0
  49. data/database/views/stream-type-summary.sql +32 -0
  50. data/database/views/type-category-summary.sql +32 -0
  51. data/database/views/type-stream-summary.sql +32 -0
  52. data/database/views/type-summary.sql +28 -0
  53. data/database/write-test-message.sh +63 -0
  54. data/scripts/mdb-clear-messages +7 -0
  55. data/scripts/mdb-create-db +7 -0
  56. data/scripts/mdb-delete-db +7 -0
  57. data/scripts/mdb-install-functions +7 -0
  58. data/scripts/mdb-install-indexes +7 -0
  59. data/scripts/mdb-install-privileges +7 -0
  60. data/scripts/mdb-install-views +7 -0
  61. data/scripts/mdb-open-database-scripts-dir +5 -0
  62. data/scripts/mdb-print-category-type-summary +7 -0
  63. data/scripts/mdb-print-message-store-version +7 -0
  64. data/scripts/mdb-print-messages +7 -0
  65. data/scripts/mdb-print-stream-summary +7 -0
  66. data/scripts/mdb-print-stream-type-summary +7 -0
  67. data/scripts/mdb-print-type-category-summary +7 -0
  68. data/scripts/mdb-print-type-stream-summary +7 -0
  69. data/scripts/mdb-print-type-summary +7 -0
  70. data/scripts/mdb-recreate-db +11 -0
  71. data/scripts/mdb-update-db +7 -0
  72. data/scripts/mdb-write-test-message +7 -0
  73. metadata +95 -6
  74. data/MIT-License.txt +0 -20
@@ -0,0 +1,44 @@
1
+ #!/usr/bin/env bash
2
+
3
+ set -e
4
+
5
+ echo
6
+
7
+ default_name=message_store
8
+
9
+ if [ -z ${DATABASE_USER+x} ]; then
10
+ echo "(DATABASE_USER is not set)"
11
+ user=$default_name
12
+ else
13
+ user=$DATABASE_USER
14
+ fi
15
+ echo "Database user is: $user"
16
+
17
+ if [ -z ${DATABASE_NAME+x} ]; then
18
+ echo "(DATABASE_NAME is not set)"
19
+ database=$default_name
20
+ else
21
+ database=$DATABASE_NAME
22
+ fi
23
+ echo "Database name is: $database"
24
+
25
+ if [ -z ${CATEGORY+x} ]; then
26
+ echo "(CATEGORY is not set)"
27
+ category=''
28
+ else
29
+ category=$CATEGORY
30
+ echo "Category is: $CATEGORY"
31
+ fi
32
+
33
+ echo
34
+ echo "Category Type Summary"
35
+ echo "= = ="
36
+ echo
37
+
38
+ if [ -z $category ]; then
39
+ psql $database -U $user -P pager=off -c "SELECT * FROM category_type_summary;"
40
+ psql $database -U $user -P pager=off -c "SELECT COUNT(*) AS total_count FROM messages;"
41
+ else
42
+ psql $database -U $user -P pager=off -c "SELECT * FROM category_type_summary WHERE category LIKE '%$category%';"
43
+ psql $database -U $user -P pager=off -c "SELECT COUNT(*) AS total_count FROM messages WHERE category(stream_name) LIKE '%$category%';"
44
+ fi
@@ -0,0 +1,32 @@
1
+ #!/usr/bin/env bash
2
+
3
+ set -e
4
+
5
+ echo
6
+ echo "Printing Message Store Version"
7
+ echo "= = ="
8
+ echo
9
+
10
+ default_name=message_store
11
+
12
+ if [ -z ${DATABASE_USER+x} ]; then
13
+ echo "(DATABASE_USER is not set)"
14
+ user=$default_name
15
+ else
16
+ user=$DATABASE_USER
17
+ fi
18
+ echo "Database user is: $user"
19
+
20
+ if [ -z ${DATABASE_NAME+x} ]; then
21
+ echo "(DATABASE_NAME is not set)"
22
+ database=$default_name
23
+ else
24
+ database=$DATABASE_NAME
25
+ fi
26
+ echo "Database name is: $database"
27
+
28
+ default_table_name=messages
29
+
30
+ echo
31
+
32
+ psql $database -U $user -P pager=off -c "SELECT message_store_version();"
@@ -0,0 +1,44 @@
1
+ #!/usr/bin/env bash
2
+
3
+ set -e
4
+
5
+ echo
6
+ echo "Printing Messages"
7
+ echo "= = ="
8
+ echo
9
+
10
+ default_name=message_store
11
+
12
+ if [ -z ${DATABASE_USER+x} ]; then
13
+ echo "(DATABASE_USER is not set)"
14
+ user=$default_name
15
+ else
16
+ user=$DATABASE_USER
17
+ fi
18
+ echo "Database user is: $user"
19
+
20
+ if [ -z ${DATABASE_NAME+x} ]; then
21
+ echo "(DATABASE_NAME is not set)"
22
+ database=$default_name
23
+ else
24
+ database=$DATABASE_NAME
25
+ fi
26
+ echo "Database name is: $database"
27
+
28
+ default_table_name=messages
29
+
30
+ if [ -z ${STREAM_NAME+x} ]; then
31
+ echo "(STREAM_NAME is not set)"
32
+ stream_name=''
33
+ else
34
+ stream_name=$STREAM_NAME
35
+ echo "Stream name is: $STREAM_NAME"
36
+ fi
37
+
38
+ echo
39
+
40
+ if [ -z $stream_name ]; then
41
+ psql $database -U $user -x -P pager=off -c "SELECT * FROM messages"
42
+ else
43
+ psql $database -U $user -x -P pager=off -c "SELECT * FROM messages WHERE stream_name = '$stream_name'"
44
+ fi
@@ -0,0 +1,44 @@
1
+ #!/usr/bin/env bash
2
+
3
+ set -e
4
+
5
+ echo
6
+
7
+ default_name=message_store
8
+
9
+ if [ -z ${DATABASE_USER+x} ]; then
10
+ echo "(DATABASE_USER is not set)"
11
+ user=$default_name
12
+ else
13
+ user=$DATABASE_USER
14
+ fi
15
+ echo "Database user is: $user"
16
+
17
+ if [ -z ${DATABASE_NAME+x} ]; then
18
+ echo "(DATABASE_NAME is not set)"
19
+ database=$default_name
20
+ else
21
+ database=$DATABASE_NAME
22
+ fi
23
+ echo "Database name is: $database"
24
+
25
+ if [ -z ${STREAM_NAME+x} ]; then
26
+ echo "(STREAM_NAME is not set)"
27
+ stream_name=''
28
+ else
29
+ stream_name=$STREAM_NAME
30
+ echo "Stream name is: $STREAM_NAME"
31
+ fi
32
+
33
+ echo
34
+ echo "Stream Summary"
35
+ echo "= = ="
36
+ echo
37
+
38
+ if [ -z $stream_name ]; then
39
+ psql $database -U $user -P pager=off -c "SELECT * FROM stream_summary ORDER BY message_count DESC;"
40
+ psql $database -U $user -P pager=off -c "SELECT COUNT(*) AS total_count FROM messages;"
41
+ else
42
+ psql $database -U $user -P pager=off -c "SELECT * FROM stream_summary WHERE stream_name LIKE '%$stream_name%' ORDER BY message_count DESC;"
43
+ psql $database -U $user -P pager=off -c "SELECT COUNT(*) AS total_count FROM messages WHERE stream_name LIKE '%$stream_name%';"
44
+ fi
@@ -0,0 +1,44 @@
1
+ #!/usr/bin/env bash
2
+
3
+ set -e
4
+
5
+ echo
6
+
7
+ default_name=message_store
8
+
9
+ if [ -z ${DATABASE_USER+x} ]; then
10
+ echo "(DATABASE_USER is not set)"
11
+ user=$default_name
12
+ else
13
+ user=$DATABASE_USER
14
+ fi
15
+ echo "Database user is: $user"
16
+
17
+ if [ -z ${DATABASE_NAME+x} ]; then
18
+ echo "(DATABASE_NAME is not set)"
19
+ database=$default_name
20
+ else
21
+ database=$DATABASE_NAME
22
+ fi
23
+ echo "Database name is: $database"
24
+
25
+ if [ -z ${STREAM_NAME+x} ]; then
26
+ echo "(STREAM_NAME is not set)"
27
+ stream_name=''
28
+ else
29
+ stream_name=$STREAM_NAME
30
+ echo "Stream name is: $STREAM_NAME"
31
+ fi
32
+
33
+ echo
34
+ echo "Stream Type Summary"
35
+ echo "= = ="
36
+ echo
37
+
38
+ if [ -z $stream_name ]; then
39
+ psql $database -U $user -P pager=off -c "SELECT * FROM stream_type_summary ORDER BY stream_name, message_count DESC, type;"
40
+ psql $database -U $user -P pager=off -c "SELECT COUNT(*) AS total_count FROM messages;"
41
+ else
42
+ psql $database -U $user -P pager=off -c "SELECT * FROM stream_type_summary WHERE stream_name LIKE '%$stream_name%' ORDER BY stream_name, message_count DESC;"
43
+ psql $database -U $user -P pager=off -c "SELECT COUNT(*) AS total_count FROM messages WHERE stream_name LIKE '%$stream_name%';"
44
+ fi
@@ -0,0 +1,44 @@
1
+ #!/usr/bin/env bash
2
+
3
+ set -e
4
+
5
+ echo
6
+
7
+ default_name=message_store
8
+
9
+ if [ -z ${DATABASE_USER+x} ]; then
10
+ echo "(DATABASE_USER is not set)"
11
+ user=$default_name
12
+ else
13
+ user=$DATABASE_USER
14
+ fi
15
+ echo "Database user is: $user"
16
+
17
+ if [ -z ${DATABASE_NAME+x} ]; then
18
+ echo "(DATABASE_NAME is not set)"
19
+ database=$default_name
20
+ else
21
+ database=$DATABASE_NAME
22
+ fi
23
+ echo "Database name is: $database"
24
+
25
+ if [ -z ${TYPE+x} ]; then
26
+ echo "(TYPE is not set)"
27
+ type=''
28
+ else
29
+ type=$TYPE
30
+ echo "Type is: $TYPE"
31
+ fi
32
+
33
+ echo
34
+ echo "Type Category Summary"
35
+ echo "= = ="
36
+ echo
37
+
38
+ if [ -z $type ]; then
39
+ psql $database -U $user -P pager=off -c "SELECT * FROM type_category_summary;"
40
+ psql $database -U $user -P pager=off -c "SELECT COUNT(*) AS total_count FROM messages;"
41
+ else
42
+ psql $database -U $user -P pager=off -c "SELECT * FROM type_category_summary WHERE type LIKE '%$type%';"
43
+ psql $database -U $user -P pager=off -c "SELECT COUNT(*) AS total_count FROM messages WHERE type LIKE '%$type%';"
44
+ fi
@@ -0,0 +1,44 @@
1
+ #!/usr/bin/env bash
2
+
3
+ set -e
4
+
5
+ echo
6
+
7
+ default_name=message_store
8
+
9
+ if [ -z ${DATABASE_USER+x} ]; then
10
+ echo "(DATABASE_USER is not set)"
11
+ user=$default_name
12
+ else
13
+ user=$DATABASE_USER
14
+ fi
15
+ echo "Database user is: $user"
16
+
17
+ if [ -z ${DATABASE_NAME+x} ]; then
18
+ echo "(DATABASE_NAME is not set)"
19
+ database=$default_name
20
+ else
21
+ database=$DATABASE_NAME
22
+ fi
23
+ echo "Database name is: $database"
24
+
25
+ if [ -z ${TYPE+x} ]; then
26
+ echo "(TYPE is not set)"
27
+ type=''
28
+ else
29
+ type=$TYPE
30
+ echo "Type is: $TYPE"
31
+ fi
32
+
33
+ echo
34
+ echo "Type Stream Summary"
35
+ echo "= = ="
36
+ echo
37
+
38
+ if [ -z $type ]; then
39
+ psql $database -U $user -P pager=off -c "SELECT * FROM type_stream_summary ORDER BY type, message_count DESC, stream_name;"
40
+ psql $database -U $user -P pager=off -c "SELECT COUNT(*) AS total_count FROM messages;"
41
+ else
42
+ psql $database -U $user -P pager=off -c "SELECT * FROM type_stream_summary WHERE type LIKE '%$type%' ORDER BY type, message_count DESC, stream_name;"
43
+ psql $database -U $user -P pager=off -c "SELECT COUNT(*) AS total_count FROM messages WHERE type LIKE '%$type%';"
44
+ fi
@@ -0,0 +1,44 @@
1
+ #!/usr/bin/env bash
2
+
3
+ set -e
4
+
5
+ echo
6
+
7
+ default_name=message_store
8
+
9
+ if [ -z ${DATABASE_USER+x} ]; then
10
+ echo "(DATABASE_USER is not set)"
11
+ user=$default_name
12
+ else
13
+ user=$DATABASE_USER
14
+ fi
15
+ echo "Database user is: $user"
16
+
17
+ if [ -z ${DATABASE_NAME+x} ]; then
18
+ echo "(DATABASE_NAME is not set)"
19
+ database=$default_name
20
+ else
21
+ database=$DATABASE_NAME
22
+ fi
23
+ echo "Database name is: $database"
24
+
25
+ if [ -z ${TYPE+x} ]; then
26
+ echo "(TYPE is not set)"
27
+ type=''
28
+ else
29
+ type=$TYPE
30
+ echo "Type is: $TYPE"
31
+ fi
32
+
33
+ echo
34
+ echo "Type Summary"
35
+ echo "= = ="
36
+ echo
37
+
38
+ if [ -z $type ]; then
39
+ psql $database -U $user -P pager=off -c "SELECT * FROM type_summary ORDER BY message_count DESC;"
40
+ psql $database -U $user -P pager=off -c "SELECT COUNT(*) AS total_count FROM messages;"
41
+ else
42
+ psql $database -U $user -P pager=off -c "SELECT * FROM type_summary WHERE type LIKE '%$type%' ORDER BY message_count DESC;"
43
+ psql $database -U $user -P pager=off -c "SELECT COUNT(*) AS total_count FROM messages WHERE type LIKE '%$type%';"
44
+ fi
@@ -0,0 +1,15 @@
1
+ GRANT EXECUTE ON FUNCTION gen_random_uuid() TO message_store;
2
+ GRANT EXECUTE ON FUNCTION md5(text) TO message_store;
3
+
4
+ GRANT EXECUTE ON FUNCTION message_store.acquire_lock(varchar) TO message_store;
5
+ GRANT EXECUTE ON FUNCTION message_store.cardinal_id(varchar) TO message_store;
6
+ GRANT EXECUTE ON FUNCTION message_store.category(varchar) TO message_store;
7
+ GRANT EXECUTE ON FUNCTION message_store.get_category_messages(varchar, bigint, bigint, varchar, bigint, bigint, varchar) TO message_store;
8
+ GRANT EXECUTE ON FUNCTION message_store.get_last_stream_message(varchar) TO message_store;
9
+ GRANT EXECUTE ON FUNCTION message_store.get_stream_messages(varchar, bigint, bigint, varchar) TO message_store;
10
+ GRANT EXECUTE ON FUNCTION message_store.hash_64(varchar) TO message_store;
11
+ GRANT EXECUTE ON FUNCTION message_store.id(varchar) TO message_store;
12
+ GRANT EXECUTE ON FUNCTION message_store.is_category(varchar) TO message_store;
13
+ GRANT EXECUTE ON FUNCTION message_store.message_store_version() TO message_store;
14
+ GRANT EXECUTE ON FUNCTION message_store.stream_version(varchar) TO message_store;
15
+ GRANT EXECUTE ON FUNCTION message_store.write_message(varchar, varchar, varchar, jsonb, jsonb, bigint) TO message_store;
@@ -0,0 +1 @@
1
+ GRANT USAGE ON SCHEMA message_store TO message_store;
@@ -0,0 +1 @@
1
+ GRANT USAGE, SELECT ON SEQUENCE message_store.messages_global_position_seq TO message_store;
@@ -0,0 +1 @@
1
+ GRANT SELECT, INSERT ON message_store.messages TO message_store;
@@ -0,0 +1,6 @@
1
+ GRANT SELECT ON message_store.category_type_summary TO message_store;
2
+ GRANT SELECT ON message_store.stream_summary TO message_store;
3
+ GRANT SELECT ON message_store.stream_type_summary TO message_store;
4
+ GRANT SELECT ON message_store.type_category_summary TO message_store;
5
+ GRANT SELECT ON message_store.type_stream_summary TO message_store;
6
+ GRANT SELECT ON message_store.type_summary TO message_store;
@@ -0,0 +1,7 @@
1
+ DO $$
2
+ BEGIN
3
+ CREATE ROLE message_store WITH LOGIN;
4
+ EXCEPTION
5
+ WHEN duplicate_object THEN
6
+ RAISE NOTICE 'The message_store role already exists';
7
+ END$$;
@@ -0,0 +1 @@
1
+ CREATE SCHEMA IF NOT EXISTS message_store;
@@ -0,0 +1,12 @@
1
+ CREATE TABLE IF NOT EXISTS message_store.messages (
2
+ id UUID NOT NULL DEFAULT gen_random_uuid(),
3
+ stream_name text NOT NULL,
4
+ type text NOT NULL,
5
+ position bigint NOT NULL,
6
+ global_position bigserial NOT NULL,
7
+ data jsonb,
8
+ metadata jsonb,
9
+ time TIMESTAMP WITHOUT TIME ZONE DEFAULT (now() AT TIME ZONE 'utc') NOT NULL
10
+ );
11
+
12
+ ALTER TABLE message_store.messages ADD PRIMARY KEY (global_position) NOT DEFERRABLE INITIALLY IMMEDIATE;
@@ -0,0 +1,15 @@
1
+ DO $$
2
+ BEGIN
3
+ DROP TYPE IF EXISTS message_store.message CASCADE;
4
+
5
+ CREATE TYPE message_store.message AS (
6
+ id varchar,
7
+ stream_name varchar,
8
+ type varchar,
9
+ position bigint,
10
+ global_position bigint,
11
+ data varchar,
12
+ metadata varchar,
13
+ time timestamp
14
+ );
15
+ END$$;
@@ -0,0 +1,54 @@
1
+ #!/usr/bin/env bash
2
+
3
+ set -e
4
+
5
+ function script_dir {
6
+ val="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
7
+ echo "$val"
8
+ }
9
+
10
+ base=$(script_dir)
11
+
12
+ echo
13
+ echo "Uninstalling Database"
14
+ echo "Version: $(cat $base/VERSION.txt)"
15
+ echo "= = ="
16
+
17
+ if [ -z ${DATABASE_NAME+x} ]; then
18
+ database=message_store
19
+ echo "DATABASE_NAME is not set. Using: $database."
20
+ else
21
+ database=$DATABASE_NAME
22
+ fi
23
+ echo
24
+
25
+ if [ -z ${PGOPTIONS+x} ]; then
26
+ export PGOPTIONS='-c client_min_messages=warning'
27
+ fi
28
+
29
+ function delete-user {
30
+ echo "» message_store user"
31
+ psql -P pager=off -q -c "DROP OWNED BY message_store;"
32
+ psql -P pager=off -q -c "DROP ROLE IF EXISTS message_store;"
33
+ }
34
+
35
+ function delete-database {
36
+ echo "» $database database"
37
+ psql -P pager=off -q -c "DROP DATABASE IF EXISTS $database;"
38
+ }
39
+
40
+ echo "Deleting database"
41
+ echo "- - -"
42
+ delete-database
43
+ echo
44
+
45
+ echo "Deleting database user"
46
+ echo "- - -"
47
+ delete-user
48
+
49
+ echo
50
+
51
+ echo "= = ="
52
+ echo "Done Uninstalling Database"
53
+ echo "Version: $(cat $base/VERSION.txt)"
54
+ echo