evt-event_source-postgres 0.16.0.0 → 0.16.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|