evt-event_source-postgres 0.16.0.0 → 0.16.1.0
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/clear-events-table.sh +42 -0
- data/database/extensions.sql +1 -0
- data/database/functions/category.sql +10 -0
- data/database/functions/stream-version.sql +13 -0
- data/database/functions/write-event.sql +55 -0
- data/database/indexes/events-category-global-position.sql +1 -0
- data/database/indexes/events-category.sql +1 -0
- data/database/indexes/events-id.sql +1 -0
- data/database/indexes/events-stream-name-position-uniq.sql +1 -0
- data/database/indexes/events-stream-name.sql +1 -0
- data/database/install.sh +89 -0
- data/database/list-events.sh +42 -0
- data/database/table/events-table.sql +20 -0
- data/database/test/write-event-expected-version.sql +1 -0
- data/database/test/write-event.sql +1 -0
- data/database/uninstall.sh +62 -0
- data/lib/event_source/loader.rb +1 -0
- data/lib/event_source/postgres/database/create.rb +22 -0
- data/lib/event_source/postgres/database/database.rb +26 -0
- data/lib/event_source/postgres/database/delete.rb +18 -0
- data/lib/event_source/postgres/database/extensions.rb +19 -0
- data/lib/event_source/postgres/database/functions.rb +57 -0
- data/lib/event_source/postgres/database/indexes.rb +87 -0
- data/lib/event_source/postgres/database/recreate.rb +12 -0
- data/lib/event_source/postgres/database/session.rb +14 -0
- data/lib/event_source/postgres/database/settings.rb +19 -0
- data/lib/event_source/postgres/database/sql_code.rb +17 -0
- data/lib/event_source/postgres/database/table.rb +19 -0
- data/lib/event_source/postgres/database/user.rb +30 -0
- data/lib/event_source/postgres/database.rb +12 -0
- data/scripts/evt-pg-create +5 -0
- data/scripts/evt-pg-delete +5 -0
- data/scripts/evt-pg-recreate +5 -0
- data/scripts/scripts_init.rb +12 -0
- metadata +42 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ea157c9663d13cb265743abe28c95e77b108ba43
|
4
|
+
data.tar.gz: c8f1355b895578f3d498be0a7351374ed54ca7ae
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 737ac3b19da5ad8821b4b9d6c67681e7c214780aeafea78734bea85aed7891e67266131b8c086dffe2103f7366c53f1f28c0ae2e5e484d605e9be2f96a184940
|
7
|
+
data.tar.gz: 64e9ca7ab470cd2e1d829d17ab5fcd275e52126a53f6328ba9e87eaab620069063187bacfbef4fbd77e73fb0a7ee8c6fce6f8afee90d612e2a2fa92a9ac16f5b
|
@@ -0,0 +1,42 @@
|
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
|
3
|
+
set -e
|
4
|
+
|
5
|
+
clear
|
6
|
+
|
7
|
+
echo
|
8
|
+
echo "Clearing Events Table"
|
9
|
+
echo "= = ="
|
10
|
+
echo
|
11
|
+
|
12
|
+
default_name=event_source
|
13
|
+
|
14
|
+
if [ -z ${DATABASE_USER+x} ]; then
|
15
|
+
echo "(DATABASE_USER is not set)"
|
16
|
+
user=$default_name
|
17
|
+
else
|
18
|
+
user=$DATABASE_USER
|
19
|
+
fi
|
20
|
+
echo "Database user is: $user"
|
21
|
+
|
22
|
+
if [ -z ${DATABASE_NAME+x} ]; then
|
23
|
+
echo "(DATABASE_NAME is not set)"
|
24
|
+
database=$default_name
|
25
|
+
else
|
26
|
+
database=$DATABASE_NAME
|
27
|
+
fi
|
28
|
+
echo "Database name is: $database"
|
29
|
+
|
30
|
+
default_table_name=events
|
31
|
+
|
32
|
+
if [ -z ${TABLE_NAME+x} ]; then
|
33
|
+
echo "(TABLE_NAME is not set)"
|
34
|
+
table=$default_table_name
|
35
|
+
else
|
36
|
+
table=$TABLE_NAME
|
37
|
+
fi
|
38
|
+
echo "Table name is: $table"
|
39
|
+
|
40
|
+
echo
|
41
|
+
|
42
|
+
psql $database -c "TRUNCATE $table RESTART IDENTITY;"
|
@@ -0,0 +1 @@
|
|
1
|
+
CREATE EXTENSION IF NOT EXISTS "pgcrypto";
|
@@ -0,0 +1,13 @@
|
|
1
|
+
CREATE OR REPLACE FUNCTION stream_version(
|
2
|
+
_stream_name varchar
|
3
|
+
)
|
4
|
+
RETURNS int
|
5
|
+
AS $$
|
6
|
+
DECLARE
|
7
|
+
stream_version int;
|
8
|
+
BEGIN
|
9
|
+
select max(position) into stream_version from events where stream_name = _stream_name;
|
10
|
+
|
11
|
+
return stream_version;
|
12
|
+
END;
|
13
|
+
$$ LANGUAGE plpgsql;
|
@@ -0,0 +1,55 @@
|
|
1
|
+
CREATE OR REPLACE FUNCTION write_event(
|
2
|
+
_id varchar,
|
3
|
+
_stream_name varchar,
|
4
|
+
_type varchar,
|
5
|
+
_data jsonb,
|
6
|
+
_metadata jsonb DEFAULT NULL,
|
7
|
+
_expected_version int DEFAULT NULL
|
8
|
+
)
|
9
|
+
RETURNS int
|
10
|
+
AS $$
|
11
|
+
DECLARE
|
12
|
+
event_id uuid;
|
13
|
+
stream_version int;
|
14
|
+
position int;
|
15
|
+
category varchar;
|
16
|
+
BEGIN
|
17
|
+
event_id = uuid(_id);
|
18
|
+
|
19
|
+
stream_version := stream_version(_stream_name);
|
20
|
+
|
21
|
+
if stream_version is null then
|
22
|
+
stream_version := -1;
|
23
|
+
end if;
|
24
|
+
|
25
|
+
if _expected_version is not null then
|
26
|
+
if _expected_version != stream_version then
|
27
|
+
raise exception 'Wrong expected version: % (Stream: %, Stream Version: %)', _expected_version, _stream_name, stream_version;
|
28
|
+
end if;
|
29
|
+
end if;
|
30
|
+
|
31
|
+
position := stream_version + 1;
|
32
|
+
|
33
|
+
insert into "events"
|
34
|
+
(
|
35
|
+
"id",
|
36
|
+
"stream_name",
|
37
|
+
"position",
|
38
|
+
"type",
|
39
|
+
"data",
|
40
|
+
"metadata"
|
41
|
+
)
|
42
|
+
values
|
43
|
+
(
|
44
|
+
event_id,
|
45
|
+
_stream_name,
|
46
|
+
position,
|
47
|
+
_type,
|
48
|
+
_data,
|
49
|
+
_metadata
|
50
|
+
)
|
51
|
+
;
|
52
|
+
|
53
|
+
return position;
|
54
|
+
END;
|
55
|
+
$$ LANGUAGE plpgsql;
|
@@ -0,0 +1 @@
|
|
1
|
+
CREATE INDEX CONCURRENTLY "events_category_global_position_idx" ON "public"."events" USING btree(category(stream_name) COLLATE "default" "pg_catalog"."text_ops" ASC NULLS LAST, "global_position" "pg_catalog"."int8_ops" ASC NULLS LAST);
|
@@ -0,0 +1 @@
|
|
1
|
+
CREATE INDEX CONCURRENTLY "events_category_idx" ON "public"."events" USING btree(category(stream_name) COLLATE "default" "pg_catalog"."text_ops" ASC NULLS LAST);
|
@@ -0,0 +1 @@
|
|
1
|
+
CREATE INDEX CONCURRENTLY "events_id_idx" ON "public"."events" USING btree(id ASC NULLS LAST);
|
@@ -0,0 +1 @@
|
|
1
|
+
CREATE UNIQUE INDEX CONCURRENTLY "events_stream_name_position_uniq_idx" ON "public"."events" USING btree(stream_name COLLATE "default" "pg_catalog"."text_ops" ASC NULLS LAST, "position" "pg_catalog"."int4_ops" ASC NULLS LAST);
|
@@ -0,0 +1 @@
|
|
1
|
+
CREATE INDEX CONCURRENTLY "events_stream_name_idx" ON "public"."events" USING btree(stream_name COLLATE "default" "pg_catalog"."text_ops" ASC NULLS LAST);
|
data/database/install.sh
ADDED
@@ -0,0 +1,89 @@
|
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
|
3
|
+
set -e
|
4
|
+
|
5
|
+
clear
|
6
|
+
|
7
|
+
echo
|
8
|
+
echo "Installing Database"
|
9
|
+
echo "= = ="
|
10
|
+
echo
|
11
|
+
|
12
|
+
default_name=event_source
|
13
|
+
|
14
|
+
if [ -z ${DATABASE_USER+x} ]; then
|
15
|
+
echo "(DATABASE_USER is not set)"
|
16
|
+
user=$default_name
|
17
|
+
else
|
18
|
+
user=$DATABASE_USER
|
19
|
+
fi
|
20
|
+
|
21
|
+
if [ -z ${DATABASE_NAME+x} ]; then
|
22
|
+
echo "(DATABASE_NAME is not set)"
|
23
|
+
database=$default_name
|
24
|
+
else
|
25
|
+
database=$DATABASE_NAME
|
26
|
+
fi
|
27
|
+
|
28
|
+
echo
|
29
|
+
|
30
|
+
function create-user {
|
31
|
+
echo "Database user is: $user"
|
32
|
+
|
33
|
+
user_exists=`psql postgres -tAc "SELECT 1 FROM pg_roles WHERE rolname='$user'"`
|
34
|
+
|
35
|
+
if [ "$user_exists" = "1" ]; then
|
36
|
+
echo "Database user \"$user\" was previously created. Not creating again."
|
37
|
+
else
|
38
|
+
echo "Database user \"$user\" has not yet been created"
|
39
|
+
echo "Creating database user \"$user\""
|
40
|
+
createuser -s $user
|
41
|
+
fi
|
42
|
+
|
43
|
+
echo
|
44
|
+
}
|
45
|
+
|
46
|
+
function create-database {
|
47
|
+
echo "Database name is: $database"
|
48
|
+
|
49
|
+
database_exists=`psql postgres -tAc "SELECT 1 FROM pg_database WHERE datname='$database'"`
|
50
|
+
|
51
|
+
if [ "$database_exists" = "1" ]; then
|
52
|
+
echo "Database \"$database\" was previously created. Not creating again."
|
53
|
+
else
|
54
|
+
echo "Database \"$database\" has not yet been created"
|
55
|
+
echo "Creating database \"$database\""
|
56
|
+
createdb $database || true
|
57
|
+
fi
|
58
|
+
|
59
|
+
echo
|
60
|
+
}
|
61
|
+
|
62
|
+
function create-extensions {
|
63
|
+
psql $database -f database/extensions.sql
|
64
|
+
}
|
65
|
+
|
66
|
+
function create-table {
|
67
|
+
psql $database -f database/table/events-table.sql
|
68
|
+
}
|
69
|
+
|
70
|
+
function create-functions {
|
71
|
+
psql $database -f database/functions/category.sql
|
72
|
+
psql $database -f database/functions/stream-version.sql
|
73
|
+
psql $database -f database/functions/write-event.sql
|
74
|
+
}
|
75
|
+
|
76
|
+
function create-indexes {
|
77
|
+
psql $database -f database/indexes/events-id.sql
|
78
|
+
psql $database -f database/indexes/events-category-global-position.sql
|
79
|
+
psql $database -f database/indexes/events-category.sql
|
80
|
+
psql $database -f database/indexes/events-stream-name.sql
|
81
|
+
psql $database -f database/indexes/events-stream-name-position-uniq.sql
|
82
|
+
}
|
83
|
+
|
84
|
+
create-user
|
85
|
+
create-database
|
86
|
+
create-extensions
|
87
|
+
create-table
|
88
|
+
create-functions
|
89
|
+
create-indexes
|
@@ -0,0 +1,42 @@
|
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
|
3
|
+
set -e
|
4
|
+
|
5
|
+
clear
|
6
|
+
|
7
|
+
echo
|
8
|
+
echo "Listing Events"
|
9
|
+
echo "= = ="
|
10
|
+
echo
|
11
|
+
|
12
|
+
default_name=event_source
|
13
|
+
|
14
|
+
if [ -z ${DATABASE_USER+x} ]; then
|
15
|
+
echo "(DATABASE_USER is not set)"
|
16
|
+
user=$default_name
|
17
|
+
else
|
18
|
+
user=$DATABASE_USER
|
19
|
+
fi
|
20
|
+
echo "Database user is: $user"
|
21
|
+
|
22
|
+
if [ -z ${DATABASE_NAME+x} ]; then
|
23
|
+
echo "(DATABASE_NAME is not set)"
|
24
|
+
database=$default_name
|
25
|
+
else
|
26
|
+
database=$DATABASE_NAME
|
27
|
+
fi
|
28
|
+
echo "Database name is: $database"
|
29
|
+
|
30
|
+
default_table_name=events
|
31
|
+
|
32
|
+
if [ -z ${TABLE_NAME+x} ]; then
|
33
|
+
echo "(TABLE_NAME is not set)"
|
34
|
+
table=$default_table_name
|
35
|
+
else
|
36
|
+
table=$TABLE_NAME
|
37
|
+
fi
|
38
|
+
echo "Table name is: $table"
|
39
|
+
|
40
|
+
echo
|
41
|
+
|
42
|
+
psql $database -c "SELECT * FROM $table"
|
@@ -0,0 +1,20 @@
|
|
1
|
+
-- ----------------------------
|
2
|
+
-- Table structure for events
|
3
|
+
-- ----------------------------
|
4
|
+
DROP TABLE IF EXISTS "public"."events";
|
5
|
+
CREATE TABLE "public"."events" (
|
6
|
+
"id" UUID NOT NULL DEFAULT gen_random_uuid(),
|
7
|
+
"stream_name" varchar(255) NOT NULL COLLATE "default",
|
8
|
+
"position" int4 NOT NULL,
|
9
|
+
"type" varchar(255) NOT NULL COLLATE "default",
|
10
|
+
"global_position" bigserial NOT NULL ,
|
11
|
+
"data" jsonb,
|
12
|
+
"metadata" jsonb,
|
13
|
+
"time" TIMESTAMP WITHOUT TIME ZONE DEFAULT (now() AT TIME ZONE 'utc') NOT NULL
|
14
|
+
)
|
15
|
+
WITH (OIDS=FALSE);
|
16
|
+
|
17
|
+
-- ----------------------------
|
18
|
+
-- Primary key structure for table events
|
19
|
+
-- ----------------------------
|
20
|
+
ALTER TABLE "public"."events" ADD PRIMARY KEY ("global_position") NOT DEFERRABLE INITIALLY IMMEDIATE;
|
@@ -0,0 +1 @@
|
|
1
|
+
SELECT write_event('someStream-123', 'SomeType', '{"someField":"some value"}', '{"someMetadataField":"some metadata value"}', 1);
|
@@ -0,0 +1 @@
|
|
1
|
+
SELECT write_event('someStream-123', 'SomeType', '{"someField":"some value"}', '{"someMetadataField":"some metadata value"}');
|
@@ -0,0 +1,62 @@
|
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
|
3
|
+
set -e
|
4
|
+
|
5
|
+
clear
|
6
|
+
|
7
|
+
echo
|
8
|
+
echo "Uninstalling Database"
|
9
|
+
echo "= = ="
|
10
|
+
echo
|
11
|
+
|
12
|
+
default_name=event_source
|
13
|
+
|
14
|
+
if [ -z ${DATABASE_USER+x} ]; then
|
15
|
+
echo "(DATABASE_USER is not set)"
|
16
|
+
user=$default_name
|
17
|
+
else
|
18
|
+
user=$DATABASE_USER
|
19
|
+
fi
|
20
|
+
|
21
|
+
if [ -z ${DATABASE_NAME+x} ]; then
|
22
|
+
echo "(DATABASE_NAME is not set)"
|
23
|
+
database=$default_name
|
24
|
+
else
|
25
|
+
database=$DATABASE_NAME
|
26
|
+
fi
|
27
|
+
|
28
|
+
echo
|
29
|
+
|
30
|
+
function delete-user {
|
31
|
+
echo "Database user is: $user"
|
32
|
+
|
33
|
+
user_exists=`psql postgres -tAc "SELECT 1 FROM pg_roles WHERE rolname='$user'"`
|
34
|
+
|
35
|
+
if [ "$user_exists" = "1" ]; then
|
36
|
+
echo "Deleting database user \"$user\""
|
37
|
+
dropuser $user
|
38
|
+
else
|
39
|
+
echo "Database user \"$user\" does not exist. Not deleting."
|
40
|
+
fi
|
41
|
+
|
42
|
+
echo
|
43
|
+
}
|
44
|
+
|
45
|
+
function delete-database {
|
46
|
+
echo "Database name is: $database"
|
47
|
+
|
48
|
+
database_exists=`psql -tAc "SELECT 1 FROM pg_database WHERE datname='$database'"`
|
49
|
+
|
50
|
+
if [ "$database_exists" = "1" ]; then
|
51
|
+
echo "Deleting database \"$database\""
|
52
|
+
dropdb $database
|
53
|
+
else
|
54
|
+
echo "Database \"$database\" does not exist. Not deleting."
|
55
|
+
fi
|
56
|
+
|
57
|
+
echo
|
58
|
+
}
|
59
|
+
|
60
|
+
|
61
|
+
delete-database
|
62
|
+
delete-user
|
@@ -0,0 +1 @@
|
|
1
|
+
lib/event_source/postgres.rb
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module EventSource
|
2
|
+
module Postgres
|
3
|
+
module Database
|
4
|
+
module Create
|
5
|
+
def self.call
|
6
|
+
warn "Creating database"
|
7
|
+
|
8
|
+
session = Session.build
|
9
|
+
|
10
|
+
User::Create.(session)
|
11
|
+
Database::Create.(session)
|
12
|
+
Extensions::Create.(session)
|
13
|
+
Table::Create.(session)
|
14
|
+
Functions::Create.(session)
|
15
|
+
Indexes::Create.(session)
|
16
|
+
|
17
|
+
warn "Done creating database"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module EventSource
|
2
|
+
module Postgres
|
3
|
+
module Database
|
4
|
+
module Database
|
5
|
+
module Create
|
6
|
+
def self.call(session)
|
7
|
+
database = Settings.database
|
8
|
+
|
9
|
+
begin
|
10
|
+
session.execute("CREATE DATABASE #{database}")
|
11
|
+
rescue PG::DuplicateDatabase
|
12
|
+
warn "NOTICE: database \"#{database}\" already exists, skipping"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
module Delete
|
18
|
+
def self.call(session)
|
19
|
+
database = Settings.database
|
20
|
+
session.execute("DROP DATABASE IF EXISTS #{database}")
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module EventSource
|
2
|
+
module Postgres
|
3
|
+
module Database
|
4
|
+
module Delete
|
5
|
+
def self.call
|
6
|
+
warn "Deleting database"
|
7
|
+
|
8
|
+
session = Session.build
|
9
|
+
|
10
|
+
User::Delete.(session)
|
11
|
+
Database::Delete.(session)
|
12
|
+
|
13
|
+
warn "Done deleting database"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module EventSource
|
2
|
+
module Postgres
|
3
|
+
module Database
|
4
|
+
module Extensions
|
5
|
+
module Create
|
6
|
+
def self.sql_filename
|
7
|
+
'extensions.sql'
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.call(session)
|
11
|
+
sql_code = SQLCode.read sql_filename
|
12
|
+
|
13
|
+
session.execute(sql_code)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
module EventSource
|
2
|
+
module Postgres
|
3
|
+
module Database
|
4
|
+
module Functions
|
5
|
+
module Create
|
6
|
+
def self.call(session)
|
7
|
+
Category::Create.(session)
|
8
|
+
StreamVersion::Create.(session)
|
9
|
+
WriteEvent::Create.(session)
|
10
|
+
end
|
11
|
+
|
12
|
+
module Category
|
13
|
+
module Create
|
14
|
+
def self.sql_filename
|
15
|
+
'functions/category.sql'
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.call(session)
|
19
|
+
sql_code = SQLCode.read sql_filename
|
20
|
+
|
21
|
+
session.execute(sql_code)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
module StreamVersion
|
27
|
+
module Create
|
28
|
+
def self.sql_filename
|
29
|
+
'functions/stream-version.sql'
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.call(session)
|
33
|
+
sql_code = SQLCode.read sql_filename
|
34
|
+
|
35
|
+
session.execute(sql_code)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
module WriteEvent
|
41
|
+
module Create
|
42
|
+
def self.sql_filename
|
43
|
+
'functions/write-event.sql'
|
44
|
+
end
|
45
|
+
|
46
|
+
def self.call(session)
|
47
|
+
sql_code = SQLCode.read sql_filename
|
48
|
+
|
49
|
+
session.execute(sql_code)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
module EventSource
|
2
|
+
module Postgres
|
3
|
+
module Database
|
4
|
+
module Indexes
|
5
|
+
module Create
|
6
|
+
def self.call(session)
|
7
|
+
Category::GlobalPosition::Create.(session)
|
8
|
+
Category::Create.(session)
|
9
|
+
ID::Create.(session)
|
10
|
+
StreamName::PositionUniq::Create.(session)
|
11
|
+
StreamName::Create.(session)
|
12
|
+
end
|
13
|
+
|
14
|
+
module Category
|
15
|
+
module Create
|
16
|
+
def self.sql_filename
|
17
|
+
'indexes/events-category.sql'
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.call(session)
|
21
|
+
sql_code = SQLCode.read sql_filename
|
22
|
+
|
23
|
+
session.execute(sql_code)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
module GlobalPosition
|
28
|
+
module Create
|
29
|
+
def self.sql_filename
|
30
|
+
'indexes/events-category-global-position.sql'
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.call(session)
|
34
|
+
sql_code = SQLCode.read sql_filename
|
35
|
+
|
36
|
+
session.execute(sql_code)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
module ID
|
43
|
+
module Create
|
44
|
+
def self.sql_filename
|
45
|
+
'indexes/events-id.sql'
|
46
|
+
end
|
47
|
+
|
48
|
+
def self.call(session)
|
49
|
+
sql_code = SQLCode.read sql_filename
|
50
|
+
|
51
|
+
session.execute(sql_code)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
module StreamName
|
57
|
+
module Create
|
58
|
+
def self.sql_filename
|
59
|
+
'indexes/events-stream-name.sql'
|
60
|
+
end
|
61
|
+
|
62
|
+
def self.call(session)
|
63
|
+
sql_code = SQLCode.read sql_filename
|
64
|
+
|
65
|
+
session.execute(sql_code)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
module PositionUniq
|
70
|
+
module Create
|
71
|
+
def self.sql_filename
|
72
|
+
'indexes/events-stream-name-position-uniq.sql'
|
73
|
+
end
|
74
|
+
|
75
|
+
def self.call(session)
|
76
|
+
sql_code = SQLCode.read sql_filename
|
77
|
+
|
78
|
+
session.execute(sql_code)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module EventSource
|
2
|
+
module Postgres
|
3
|
+
module Database
|
4
|
+
module Settings
|
5
|
+
def self.user
|
6
|
+
ENV['DATABASE_USER'] || 'event_source'
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.password
|
10
|
+
ENV['DATABASE_PASSWORD']
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.database
|
14
|
+
ENV['DATABASE_NAME'] || 'event_source'
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module EventSource
|
2
|
+
module Postgres
|
3
|
+
module Database
|
4
|
+
module SQLCode
|
5
|
+
def self.read(filename)
|
6
|
+
path = File.join root, filename
|
7
|
+
|
8
|
+
File.read path
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.root
|
12
|
+
File.expand_path '../../../../database', __dir__
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module EventSource
|
2
|
+
module Postgres
|
3
|
+
module Database
|
4
|
+
module Table
|
5
|
+
module Create
|
6
|
+
def self.sql_filename
|
7
|
+
'table/events-table.sql'
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.call(session)
|
11
|
+
sql_code = SQLCode.read sql_filename
|
12
|
+
|
13
|
+
session.execute(sql_code)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module EventSource
|
2
|
+
module Postgres
|
3
|
+
module Database
|
4
|
+
module User
|
5
|
+
module Create
|
6
|
+
def self.call(session)
|
7
|
+
user = Settings.user
|
8
|
+
password = Settings.password
|
9
|
+
|
10
|
+
create_user_statement = "CREATE USER #{user}"
|
11
|
+
create_user_statement << " PASSWORD #{password}" unless password.nil?
|
12
|
+
|
13
|
+
begin
|
14
|
+
session.execute(create_user_statement)
|
15
|
+
rescue PG::DuplicateObject
|
16
|
+
warn "NOTICE: role \"#{user}\" already exists, skipping"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
module Delete
|
22
|
+
def self.call(session)
|
23
|
+
user = Settings.user
|
24
|
+
session.execute("DROP USER IF EXISTS #{user}")
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'event_source/postgres/database/settings'
|
2
|
+
require 'event_source/postgres/database/session'
|
3
|
+
require 'event_source/postgres/database/delete'
|
4
|
+
require 'event_source/postgres/database/create'
|
5
|
+
require 'event_source/postgres/database/user'
|
6
|
+
require 'event_source/postgres/database/database'
|
7
|
+
require 'event_source/postgres/database/extensions'
|
8
|
+
require 'event_source/postgres/database/table'
|
9
|
+
require 'event_source/postgres/database/indexes'
|
10
|
+
require 'event_source/postgres/database/functions'
|
11
|
+
require 'event_source/postgres/database/sql_code'
|
12
|
+
require 'event_source/postgres/database/recreate'
|
@@ -0,0 +1,12 @@
|
|
1
|
+
ENV['CONSOLE_DEVICE'] ||= 'stdout'
|
2
|
+
ENV['LOG_LEVEL'] ||= '_min'
|
3
|
+
|
4
|
+
puts RUBY_DESCRIPTION
|
5
|
+
|
6
|
+
init_file = File.expand_path('../init.rb', __dir__)
|
7
|
+
if File.exist?(init_file)
|
8
|
+
require_relative '../init'
|
9
|
+
end
|
10
|
+
|
11
|
+
require 'event_source/postgres'
|
12
|
+
require 'event_source/postgres/database'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: evt-event_source-postgres
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.16.
|
4
|
+
version: 0.16.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- The Eventide Project
|
8
8
|
autorequire:
|
9
|
-
bindir:
|
9
|
+
bindir: scripts
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-03-
|
11
|
+
date: 2017-03-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: evt-event_source
|
@@ -96,16 +96,49 @@ dependencies:
|
|
96
96
|
version: '0'
|
97
97
|
description: " "
|
98
98
|
email: opensource@eventide-project.org
|
99
|
-
executables:
|
99
|
+
executables:
|
100
|
+
- evt-pg-create
|
101
|
+
- evt-pg-delete
|
102
|
+
- evt-pg-recreate
|
100
103
|
extensions: []
|
101
104
|
extra_rdoc_files: []
|
102
105
|
files:
|
106
|
+
- database/clear-events-table.sh
|
107
|
+
- database/extensions.sql
|
108
|
+
- database/functions/category.sql
|
109
|
+
- database/functions/stream-version.sql
|
110
|
+
- database/functions/write-event.sql
|
111
|
+
- database/indexes/events-category-global-position.sql
|
112
|
+
- database/indexes/events-category.sql
|
113
|
+
- database/indexes/events-id.sql
|
114
|
+
- database/indexes/events-stream-name-position-uniq.sql
|
115
|
+
- database/indexes/events-stream-name.sql
|
116
|
+
- database/install.sh
|
117
|
+
- database/list-events.sh
|
118
|
+
- database/table/events-table.sql
|
119
|
+
- database/test/write-event-expected-version.sql
|
120
|
+
- database/test/write-event.sql
|
121
|
+
- database/uninstall.sh
|
122
|
+
- lib/event_source/loader.rb
|
103
123
|
- lib/event_source/postgres.rb
|
104
124
|
- lib/event_source/postgres/controls.rb
|
105
125
|
- lib/event_source/postgres/controls/category.rb
|
106
126
|
- lib/event_source/postgres/controls/event_data.rb
|
107
127
|
- lib/event_source/postgres/controls/put.rb
|
108
128
|
- lib/event_source/postgres/controls/stream_name.rb
|
129
|
+
- lib/event_source/postgres/database.rb
|
130
|
+
- lib/event_source/postgres/database/create.rb
|
131
|
+
- lib/event_source/postgres/database/database.rb
|
132
|
+
- lib/event_source/postgres/database/delete.rb
|
133
|
+
- lib/event_source/postgres/database/extensions.rb
|
134
|
+
- lib/event_source/postgres/database/functions.rb
|
135
|
+
- lib/event_source/postgres/database/indexes.rb
|
136
|
+
- lib/event_source/postgres/database/recreate.rb
|
137
|
+
- lib/event_source/postgres/database/session.rb
|
138
|
+
- lib/event_source/postgres/database/settings.rb
|
139
|
+
- lib/event_source/postgres/database/sql_code.rb
|
140
|
+
- lib/event_source/postgres/database/table.rb
|
141
|
+
- lib/event_source/postgres/database/user.rb
|
109
142
|
- lib/event_source/postgres/get.rb
|
110
143
|
- lib/event_source/postgres/get/last.rb
|
111
144
|
- lib/event_source/postgres/get/last/select_statement.rb
|
@@ -118,6 +151,10 @@ files:
|
|
118
151
|
- lib/event_source/postgres/settings.rb
|
119
152
|
- lib/event_source/postgres/stream_name.rb
|
120
153
|
- lib/event_source/postgres/write.rb
|
154
|
+
- scripts/evt-pg-create
|
155
|
+
- scripts/evt-pg-delete
|
156
|
+
- scripts/evt-pg-recreate
|
157
|
+
- scripts/scripts_init.rb
|
121
158
|
homepage: https://github.com/eventide-project/event-source-postgres
|
122
159
|
licenses:
|
123
160
|
- MIT
|
@@ -138,7 +175,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
138
175
|
version: '0'
|
139
176
|
requirements: []
|
140
177
|
rubyforge_project:
|
141
|
-
rubygems_version: 2.6.
|
178
|
+
rubygems_version: 2.6.11
|
142
179
|
signing_key:
|
143
180
|
specification_version: 4
|
144
181
|
summary: Event source client for PostgreSQL
|