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.
- checksums.yaml +4 -4
- data/database/VERSION.txt +1 -0
- data/database/benchmark.sh +62 -0
- data/database/benchmark_get.sql +24 -0
- data/database/benchmark_write.sql +24 -0
- data/database/clear-messages.sh +26 -0
- data/database/extensions/pgcrypto.sql +1 -0
- data/database/functions/acquire-lock.sql +24 -0
- data/database/functions/cardinal-id.sql +18 -0
- data/database/functions/category.sql +10 -0
- data/database/functions/get-category-messages.sql +129 -0
- data/database/functions/get-last-stream-message.sql +37 -0
- data/database/functions/get-stream-messages.sql +71 -0
- data/database/functions/hash-64.sql +13 -0
- data/database/functions/id.sql +18 -0
- data/database/functions/is-category.sql +14 -0
- data/database/functions/message-store-version.sql +8 -0
- data/database/functions/stream-version.sql +19 -0
- data/database/functions/write-message.sql +73 -0
- data/database/indexes/messages-category.sql +7 -0
- data/database/indexes/messages-id.sql +5 -0
- data/database/indexes/messages-stream.sql +6 -0
- data/database/install-functions.sh +79 -0
- data/database/install-indexes.sh +33 -0
- data/database/install-privileges.sh +39 -0
- data/database/install-views.sh +42 -0
- data/database/install.sh +102 -0
- data/database/print-category-type-summary.sh +44 -0
- data/database/print-message-store-version.sh +32 -0
- data/database/print-messages.sh +44 -0
- data/database/print-stream-summary.sh +44 -0
- data/database/print-stream-type-summary.sh +44 -0
- data/database/print-type-category-summary.sh +44 -0
- data/database/print-type-stream-summary.sh +44 -0
- data/database/print-type-summary.sh +44 -0
- data/database/privileges/functions.sql +15 -0
- data/database/privileges/schema.sql +1 -0
- data/database/privileges/sequence.sql +1 -0
- data/database/privileges/table.sql +1 -0
- data/database/privileges/views.sql +6 -0
- data/database/roles/message-store.sql +7 -0
- data/database/schema/message-store.sql +1 -0
- data/database/tables/messages.sql +12 -0
- data/database/types/message.sql +15 -0
- data/database/uninstall.sh +54 -0
- data/database/update.sh +171 -0
- data/database/views/category-type-summary.sql +32 -0
- data/database/views/stream-summary.sql +28 -0
- data/database/views/stream-type-summary.sql +32 -0
- data/database/views/type-category-summary.sql +32 -0
- data/database/views/type-stream-summary.sql +32 -0
- data/database/views/type-summary.sql +28 -0
- data/database/write-test-message.sh +63 -0
- data/scripts/mdb-clear-messages +7 -0
- data/scripts/mdb-create-db +7 -0
- data/scripts/mdb-delete-db +7 -0
- data/scripts/mdb-install-functions +7 -0
- data/scripts/mdb-install-indexes +7 -0
- data/scripts/mdb-install-privileges +7 -0
- data/scripts/mdb-install-views +7 -0
- data/scripts/mdb-open-database-scripts-dir +5 -0
- data/scripts/mdb-print-category-type-summary +7 -0
- data/scripts/mdb-print-message-store-version +7 -0
- data/scripts/mdb-print-messages +7 -0
- data/scripts/mdb-print-stream-summary +7 -0
- data/scripts/mdb-print-stream-type-summary +7 -0
- data/scripts/mdb-print-type-category-summary +7 -0
- data/scripts/mdb-print-type-stream-summary +7 -0
- data/scripts/mdb-print-type-summary +7 -0
- data/scripts/mdb-recreate-db +11 -0
- data/scripts/mdb-update-db +7 -0
- data/scripts/mdb-write-test-message +7 -0
- metadata +95 -6
- data/MIT-License.txt +0 -20
@@ -0,0 +1,13 @@
|
|
1
|
+
CREATE OR REPLACE FUNCTION message_store.hash_64(
|
2
|
+
value varchar
|
3
|
+
)
|
4
|
+
RETURNS bigint
|
5
|
+
AS $$
|
6
|
+
DECLARE
|
7
|
+
_hash bigint;
|
8
|
+
BEGIN
|
9
|
+
SELECT left('x' || md5(hash_64.value), 17)::bit(64)::bigint INTO _hash;
|
10
|
+
return _hash;
|
11
|
+
END;
|
12
|
+
$$ LANGUAGE plpgsql
|
13
|
+
IMMUTABLE;
|
@@ -0,0 +1,18 @@
|
|
1
|
+
CREATE OR REPLACE FUNCTION message_store.id(
|
2
|
+
stream_name varchar
|
3
|
+
)
|
4
|
+
RETURNS varchar
|
5
|
+
AS $$
|
6
|
+
DECLARE
|
7
|
+
_id_separator_position integer;
|
8
|
+
BEGIN
|
9
|
+
_id_separator_position := STRPOS(id.stream_name, '-');
|
10
|
+
|
11
|
+
IF _id_separator_position = 0 THEN
|
12
|
+
RETURN NULL;
|
13
|
+
END IF;
|
14
|
+
|
15
|
+
RETURN SUBSTRING(id.stream_name, _id_separator_position + 1);
|
16
|
+
END;
|
17
|
+
$$ LANGUAGE plpgsql
|
18
|
+
IMMUTABLE;
|
@@ -0,0 +1,14 @@
|
|
1
|
+
CREATE OR REPLACE FUNCTION message_store.is_category(
|
2
|
+
stream_name varchar
|
3
|
+
)
|
4
|
+
RETURNS boolean
|
5
|
+
AS $$
|
6
|
+
BEGIN
|
7
|
+
IF NOT STRPOS(is_category.stream_name, '-') = 0 THEN
|
8
|
+
RETURN FALSE;
|
9
|
+
END IF;
|
10
|
+
|
11
|
+
RETURN TRUE;
|
12
|
+
END;
|
13
|
+
$$ LANGUAGE plpgsql
|
14
|
+
IMMUTABLE;
|
@@ -0,0 +1,19 @@
|
|
1
|
+
CREATE OR REPLACE FUNCTION message_store.stream_version(
|
2
|
+
stream_name varchar
|
3
|
+
)
|
4
|
+
RETURNS bigint
|
5
|
+
AS $$
|
6
|
+
DECLARE
|
7
|
+
_stream_version bigint;
|
8
|
+
BEGIN
|
9
|
+
SELECT
|
10
|
+
max(position) into _stream_version
|
11
|
+
FROM
|
12
|
+
messages
|
13
|
+
WHERE
|
14
|
+
messages.stream_name = stream_version.stream_name;
|
15
|
+
|
16
|
+
RETURN _stream_version;
|
17
|
+
END;
|
18
|
+
$$ LANGUAGE plpgsql
|
19
|
+
VOLATILE;
|
@@ -0,0 +1,73 @@
|
|
1
|
+
CREATE OR REPLACE FUNCTION message_store.write_message(
|
2
|
+
id varchar,
|
3
|
+
stream_name varchar,
|
4
|
+
"type" varchar,
|
5
|
+
data jsonb,
|
6
|
+
metadata jsonb DEFAULT NULL,
|
7
|
+
expected_version bigint DEFAULT NULL
|
8
|
+
)
|
9
|
+
RETURNS bigint
|
10
|
+
AS $$
|
11
|
+
DECLARE
|
12
|
+
_message_id uuid;
|
13
|
+
_stream_version bigint;
|
14
|
+
_next_position bigint;
|
15
|
+
BEGIN
|
16
|
+
PERFORM acquire_lock(write_message.stream_name);
|
17
|
+
|
18
|
+
_stream_version := stream_version(write_message.stream_name);
|
19
|
+
|
20
|
+
IF _stream_version IS NULL THEN
|
21
|
+
_stream_version := -1;
|
22
|
+
END IF;
|
23
|
+
|
24
|
+
IF write_message.expected_version IS NOT NULL THEN
|
25
|
+
IF write_message.expected_version != _stream_version THEN
|
26
|
+
RAISE EXCEPTION
|
27
|
+
'Wrong expected version: % (Stream: %, Stream Version: %)',
|
28
|
+
write_message.expected_version,
|
29
|
+
write_message.stream_name,
|
30
|
+
_stream_version;
|
31
|
+
END IF;
|
32
|
+
END IF;
|
33
|
+
|
34
|
+
_next_position := _stream_version + 1;
|
35
|
+
|
36
|
+
_message_id = uuid(write_message.id);
|
37
|
+
|
38
|
+
INSERT INTO messages
|
39
|
+
(
|
40
|
+
id,
|
41
|
+
stream_name,
|
42
|
+
position,
|
43
|
+
type,
|
44
|
+
data,
|
45
|
+
metadata
|
46
|
+
)
|
47
|
+
VALUES
|
48
|
+
(
|
49
|
+
_message_id,
|
50
|
+
write_message.stream_name,
|
51
|
+
_next_position,
|
52
|
+
write_message.type,
|
53
|
+
write_message.data,
|
54
|
+
write_message.metadata
|
55
|
+
)
|
56
|
+
;
|
57
|
+
|
58
|
+
IF current_setting('message_store.debug_write', true) = 'on' OR current_setting('message_store.debug', true) = 'on' THEN
|
59
|
+
RAISE NOTICE '» write_message';
|
60
|
+
RAISE NOTICE 'id ($1): %', write_message.id;
|
61
|
+
RAISE NOTICE 'stream_name ($2): %', write_message.stream_name;
|
62
|
+
RAISE NOTICE 'type ($3): %', write_message.type;
|
63
|
+
RAISE NOTICE 'data ($4): %', write_message.data;
|
64
|
+
RAISE NOTICE 'metadata ($5): %', write_message.metadata;
|
65
|
+
RAISE NOTICE 'expected_version ($6): %', write_message.expected_version;
|
66
|
+
RAISE NOTICE '_stream_version: %', _stream_version;
|
67
|
+
RAISE NOTICE '_next_position: %', _next_position;
|
68
|
+
END IF;
|
69
|
+
|
70
|
+
RETURN _next_position;
|
71
|
+
END;
|
72
|
+
$$ LANGUAGE plpgsql
|
73
|
+
VOLATILE;
|
@@ -0,0 +1,79 @@
|
|
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
|
+
function create-types {
|
11
|
+
if [ -z ${DATABASE_NAME+x} ]; then
|
12
|
+
database=message_store
|
13
|
+
echo "(DATABASE_NAME is not set. Using: $database.)"
|
14
|
+
else
|
15
|
+
database=$DATABASE_NAME
|
16
|
+
fi
|
17
|
+
|
18
|
+
base=$(script_dir)
|
19
|
+
|
20
|
+
echo "» message type"
|
21
|
+
psql $database -q -f $base/types/message.sql
|
22
|
+
}
|
23
|
+
|
24
|
+
function create-functions {
|
25
|
+
if [ -z ${DATABASE_NAME+x} ]; then
|
26
|
+
database=message_store
|
27
|
+
echo "(DATABASE_NAME is not set. Using: $database.)"
|
28
|
+
else
|
29
|
+
database=$DATABASE_NAME
|
30
|
+
fi
|
31
|
+
|
32
|
+
base=$(script_dir)
|
33
|
+
|
34
|
+
echo "» message_store_version function"
|
35
|
+
psql $database -q -f $base/functions/message-store-version.sql
|
36
|
+
|
37
|
+
echo "» hash_64 function"
|
38
|
+
psql $database -q -f $base/functions/hash-64.sql
|
39
|
+
|
40
|
+
echo "» acquire_lock function"
|
41
|
+
psql $database -q -f $base/functions/acquire-lock.sql
|
42
|
+
|
43
|
+
echo "» category function"
|
44
|
+
psql $database -q -f $base/functions/category.sql
|
45
|
+
|
46
|
+
echo "» is_category function"
|
47
|
+
psql $database -q -f $base/functions/is-category.sql
|
48
|
+
|
49
|
+
echo "» id function"
|
50
|
+
psql $database -q -f $base/functions/id.sql
|
51
|
+
|
52
|
+
echo "» cardinal_id function"
|
53
|
+
psql $database -q -f $base/functions/cardinal-id.sql
|
54
|
+
|
55
|
+
echo "» stream_version function"
|
56
|
+
psql $database -q -f $base/functions/stream-version.sql
|
57
|
+
|
58
|
+
echo "» write_message function"
|
59
|
+
psql $database -q -f $base/functions/write-message.sql
|
60
|
+
|
61
|
+
echo "» get_stream_messages function"
|
62
|
+
psql $database -q -f $base/functions/get-stream-messages.sql
|
63
|
+
|
64
|
+
echo "» get_category_messages function"
|
65
|
+
psql $database -q -f $base/functions/get-category-messages.sql
|
66
|
+
|
67
|
+
echo "» get_last_stream_message function"
|
68
|
+
psql $database -q -f $base/functions/get-last-stream-message.sql
|
69
|
+
}
|
70
|
+
|
71
|
+
echo "Creating Types"
|
72
|
+
echo "- - -"
|
73
|
+
create-types
|
74
|
+
echo
|
75
|
+
|
76
|
+
echo "Creating Functions"
|
77
|
+
echo "- - -"
|
78
|
+
create-functions
|
79
|
+
echo
|
@@ -0,0 +1,33 @@
|
|
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
|
+
function create-indexes {
|
11
|
+
if [ -z ${DATABASE_NAME+x} ]; then
|
12
|
+
database=message_store
|
13
|
+
echo "(DATABASE_NAME is not set. Using: $database.)"
|
14
|
+
else
|
15
|
+
database=$DATABASE_NAME
|
16
|
+
fi
|
17
|
+
|
18
|
+
base=$(script_dir)
|
19
|
+
|
20
|
+
echo "» messages_id index"
|
21
|
+
psql $database -q -f $base/indexes/messages-id.sql
|
22
|
+
|
23
|
+
echo "» messages_stream index"
|
24
|
+
psql $database -q -f $base/indexes/messages-stream.sql
|
25
|
+
|
26
|
+
echo "» messages_category index"
|
27
|
+
psql $database -q -f $base/indexes/messages-category.sql
|
28
|
+
}
|
29
|
+
|
30
|
+
echo "Creating Indexes"
|
31
|
+
echo "- - -"
|
32
|
+
create-indexes
|
33
|
+
echo
|
@@ -0,0 +1,39 @@
|
|
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
|
+
function grant-privileges {
|
11
|
+
if [ -z ${DATABASE_NAME+x} ]; then
|
12
|
+
database=message_store
|
13
|
+
echo "(DATABASE_NAME is not set. Using: $database.)"
|
14
|
+
else
|
15
|
+
database=$DATABASE_NAME
|
16
|
+
fi
|
17
|
+
|
18
|
+
base=$(script_dir)
|
19
|
+
|
20
|
+
echo "» schema privileges"
|
21
|
+
psql $database -q -f $base/privileges/schema.sql
|
22
|
+
|
23
|
+
echo "» messages table privileges"
|
24
|
+
psql $database -q -f $base/privileges/table.sql
|
25
|
+
|
26
|
+
echo "» sequence privileges"
|
27
|
+
psql $database -q -f $base/privileges/sequence.sql
|
28
|
+
|
29
|
+
echo "» functions privileges"
|
30
|
+
psql $database -q -f $base/privileges/functions.sql
|
31
|
+
|
32
|
+
echo "» views privileges"
|
33
|
+
psql $database -q -f $base/privileges/views.sql
|
34
|
+
}
|
35
|
+
|
36
|
+
echo "Granting Privileges"
|
37
|
+
echo "- - -"
|
38
|
+
grant-privileges
|
39
|
+
echo
|
@@ -0,0 +1,42 @@
|
|
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
|
+
function create-views {
|
11
|
+
if [ -z ${DATABASE_NAME+x} ]; then
|
12
|
+
database=message_store
|
13
|
+
echo "(DATABASE_NAME is not set. Using: $database.)"
|
14
|
+
else
|
15
|
+
database=$DATABASE_NAME
|
16
|
+
fi
|
17
|
+
|
18
|
+
base=$(script_dir)
|
19
|
+
|
20
|
+
echo "» stream_summary view"
|
21
|
+
psql $database -q -f $base/views/stream-summary.sql
|
22
|
+
|
23
|
+
echo "» type_summary view"
|
24
|
+
psql $database -q -f $base/views/type-summary.sql
|
25
|
+
|
26
|
+
echo "» stream_type_summary view"
|
27
|
+
psql $database -q -f $base/views/stream-type-summary.sql
|
28
|
+
|
29
|
+
echo "» type_stream_summary view"
|
30
|
+
psql $database -q -f $base/views/type-stream-summary.sql
|
31
|
+
|
32
|
+
echo "» category_type_summary view"
|
33
|
+
psql $database -q -f $base/views/category-type-summary.sql
|
34
|
+
|
35
|
+
echo "» type_category_summary view"
|
36
|
+
psql $database -q -f $base/views/type-category-summary.sql
|
37
|
+
}
|
38
|
+
|
39
|
+
echo "Creating Views"
|
40
|
+
echo "- - -"
|
41
|
+
create-views
|
42
|
+
echo
|
data/database/install.sh
ADDED
@@ -0,0 +1,102 @@
|
|
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 "Installing 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
|
+
export DATABASE_NAME=$database
|
21
|
+
else
|
22
|
+
database=$DATABASE_NAME
|
23
|
+
fi
|
24
|
+
|
25
|
+
if [ -z ${PGOPTIONS+x} ]; then
|
26
|
+
export PGOPTIONS='-c client_min_messages=warning'
|
27
|
+
fi
|
28
|
+
|
29
|
+
function create-user {
|
30
|
+
base=$(script_dir)
|
31
|
+
|
32
|
+
echo "» message_store role"
|
33
|
+
psql -q -f $base/roles/message-store.sql
|
34
|
+
}
|
35
|
+
|
36
|
+
function create-database {
|
37
|
+
echo "» $database database"
|
38
|
+
createdb $database
|
39
|
+
}
|
40
|
+
|
41
|
+
function create-schema {
|
42
|
+
echo "» message_store schema"
|
43
|
+
psql $database -q -f $base/schema/message-store.sql
|
44
|
+
}
|
45
|
+
|
46
|
+
function create-extensions {
|
47
|
+
base=$(script_dir)
|
48
|
+
|
49
|
+
echo "» pgcrypto extension"
|
50
|
+
psql $database -q -f $base/extensions/pgcrypto.sql
|
51
|
+
}
|
52
|
+
|
53
|
+
function create-table {
|
54
|
+
base=$(script_dir)
|
55
|
+
|
56
|
+
echo "» messages table"
|
57
|
+
psql $database -q -f $base/tables/messages.sql
|
58
|
+
}
|
59
|
+
|
60
|
+
echo
|
61
|
+
|
62
|
+
echo "Creating User"
|
63
|
+
echo "- - -"
|
64
|
+
create-user
|
65
|
+
echo
|
66
|
+
|
67
|
+
echo "Creating Database"
|
68
|
+
echo "- - -"
|
69
|
+
create-database
|
70
|
+
echo
|
71
|
+
|
72
|
+
echo "Creating Schema"
|
73
|
+
echo "- - -"
|
74
|
+
create-schema
|
75
|
+
echo
|
76
|
+
|
77
|
+
echo "Creating Extensions"
|
78
|
+
echo "- - -"
|
79
|
+
create-extensions
|
80
|
+
echo
|
81
|
+
|
82
|
+
echo "Creating Table"
|
83
|
+
echo "- - -"
|
84
|
+
create-table
|
85
|
+
echo
|
86
|
+
|
87
|
+
# Install functions
|
88
|
+
source $base/install-functions.sh
|
89
|
+
|
90
|
+
# Install indexes
|
91
|
+
source $base/install-indexes.sh
|
92
|
+
|
93
|
+
# Install views
|
94
|
+
source $base/install-views.sh
|
95
|
+
|
96
|
+
# Install privileges
|
97
|
+
source $base/install-privileges.sh
|
98
|
+
|
99
|
+
echo "= = ="
|
100
|
+
echo "Done Installing Database"
|
101
|
+
echo "Version: $(cat $base/VERSION.txt)"
|
102
|
+
echo
|