mirror of
https://github.com/hasura/graphql-engine.git
synced 2024-12-15 09:22:43 +03:00
e32f5a1fb1
1. Haskel library `pg-client-hs` has been updated to expose a function that helps listen to `postgres` notifications over a `channel` in this [PR](https://github.com/hasura/pg-client-hs/pull/5) 2. The server records an event in a table `hdb_catalog.hdb_cache_update_event` whenever any `/v1/query` (that changes metadata) is requested. A trigger notifies a `cache update` event via `hasura_cache_update` channel 3. The server runs two concurrent threads namely `listener` and `processor`. The `listener` thread listens to events on `hasura_cache_update` channel and pushed into a `Queue`. The `processor` thread fetches events from that `Queue` and processes it. Thus server rebuilds schema cache from database and updates.
94 lines
2.0 KiB
YAML
94 lines
2.0 KiB
YAML
-
|
|
operation:
|
|
server: '1'
|
|
query:
|
|
type: bulk
|
|
args:
|
|
- type: run_sql
|
|
args:
|
|
sql: |
|
|
create table test_t1(
|
|
t1_c1 int,
|
|
t1_c2 text,
|
|
PRIMARY KEY (t1_c1)
|
|
);
|
|
- type: track_table
|
|
args:
|
|
schema: public
|
|
name: test_t1
|
|
- type: run_sql
|
|
args:
|
|
sql: |
|
|
insert into test_t1(t1_c1, t1_c2) VALUES(1, 'table1');
|
|
validate:
|
|
server: '2'
|
|
response:
|
|
data:
|
|
test_t1:
|
|
- t1_c1: 1
|
|
t1_c2: table1
|
|
query:
|
|
query: |
|
|
query {
|
|
test_t1 {
|
|
t1_c1
|
|
t1_c2
|
|
}
|
|
}
|
|
-
|
|
operation:
|
|
server: '2'
|
|
query:
|
|
type: bulk
|
|
args:
|
|
- type: run_sql
|
|
args:
|
|
sql: |
|
|
create table test_t2(
|
|
t2_c1 int,
|
|
t2_c2 text,
|
|
PRIMARY KEY (t2_c1)
|
|
);
|
|
- type: run_sql
|
|
args:
|
|
sql: |
|
|
ALTER TABLE test_t2 ADD FOREIGN KEY (t2_c1) REFERENCES test_t1 (t1_c1);
|
|
- type: track_table
|
|
args:
|
|
schema: public
|
|
name: test_t2
|
|
- type: create_object_relationship
|
|
args:
|
|
name: testT1Byc1
|
|
table:
|
|
name: test_t2
|
|
schema: public
|
|
using:
|
|
foreign_key_constraint_on: t2_c1
|
|
- type: run_sql
|
|
args:
|
|
sql: |
|
|
insert into test_t2(t2_c1, t2_c2) VALUES(1, 'table2');
|
|
validate:
|
|
server: '1'
|
|
query:
|
|
query: |
|
|
query {
|
|
test_t2 {
|
|
t2_c1
|
|
t2_c2
|
|
testT1Byc1 {
|
|
t1_c1
|
|
t1_c2
|
|
}
|
|
}
|
|
}
|
|
response:
|
|
data:
|
|
test_t2:
|
|
- t2_c1: 1
|
|
t2_c2: table2
|
|
testT1Byc1:
|
|
t1_c1: 1
|
|
t1_c2: table1
|