message-db 0.0.0 → 1.1.3

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 (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