prostgles-server 4.0.57 → 4.0.59
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.
- package/dist/DboBuilder/getColumns.d.ts.map +1 -1
- package/dist/DboBuilder/getColumns.js +1 -13
- package/dist/DboBuilder/getColumns.js.map +1 -1
- package/dist/DboBuilder/runSQL.js +2 -2
- package/dist/DboBuilder/runSQL.js.map +1 -1
- package/dist/Prostgles.d.ts.map +1 -1
- package/dist/PubSubManager/PubSubManager.d.ts +1 -1
- package/dist/PubSubManager/PubSubManager.d.ts.map +1 -1
- package/dist/PubSubManager/PubSubManager.js +14 -1
- package/dist/PubSubManager/PubSubManager.js.map +1 -1
- package/lib/DboBuilder/getColumns.ts +1 -18
- package/lib/DboBuilder/runSQL.ts +2 -2
- package/lib/Prostgles.ts +3 -3
- package/lib/PubSubManager/PubSubManager.ts +14 -1
- package/package.json +2 -2
- package/tests/client/PID.txt +1 -1
- package/tests/client/package.json +2 -2
- package/tests/client/tsconfig.json +2 -1
- package/tests/isomorphic_queries.ts +11 -9
- package/tests/server/DBoGenerated.d.ts +1 -1
- package/tests/server/dboTypeCheck.ts +3 -3
- package/tests/server/index.ts +7 -6
- package/tests/server/package-lock.json +1 -1
- package/tests/server/package.json +3 -3
- package/tests/server/publishTypeCheck.ts +1 -1
- package/tests/server/tsconfig.json +3 -2
- package/tests/test.sh +2 -0
- package/dist/FileManager.d.ts +0 -143
- package/dist/FileManager.d.ts.map +0 -1
- package/dist/FileManager.js +0 -646
- package/dist/FileManager.js.map +0 -1
- package/dist/TableConfig.d.ts +0 -267
- package/dist/TableConfig.d.ts.map +0 -1
- package/dist/TableConfig.js +0 -463
- package/dist/TableConfig.js.map +0 -1
- package/dist/validation.d.ts +0 -126
- package/dist/validation.d.ts.map +0 -1
- package/dist/validation.js +0 -405
- package/dist/validation.js.map +0 -1
- package/lib/AuthHandler.d.ts +0 -187
- package/lib/AuthHandler.d.ts.map +0 -1
- package/lib/AuthHandler.js +0 -478
- package/lib/DBEventsManager.d.ts +0 -38
- package/lib/DBEventsManager.d.ts.map +0 -1
- package/lib/DBEventsManager.js +0 -140
- package/lib/DBSchemaBuilder.d.ts +0 -13
- package/lib/DBSchemaBuilder.d.ts.map +0 -1
- package/lib/DBSchemaBuilder.js +0 -145
- package/lib/DboBuilder/QueryBuilder/Functions.d.ts +0 -64
- package/lib/DboBuilder/QueryBuilder/Functions.d.ts.map +0 -1
- package/lib/DboBuilder/QueryBuilder/Functions.js +0 -984
- package/lib/DboBuilder/QueryBuilder/QueryBuilder.d.ts +0 -73
- package/lib/DboBuilder/QueryBuilder/QueryBuilder.d.ts.map +0 -1
- package/lib/DboBuilder/QueryBuilder/QueryBuilder.js +0 -335
- package/lib/DboBuilder/QueryBuilder/makeSelectQuery.d.ts +0 -8
- package/lib/DboBuilder/QueryBuilder/makeSelectQuery.d.ts.map +0 -1
- package/lib/DboBuilder/QueryBuilder/makeSelectQuery.js +0 -227
- package/lib/DboBuilder/TableHandler.d.ts +0 -37
- package/lib/DboBuilder/TableHandler.d.ts.map +0 -1
- package/lib/DboBuilder/TableHandler.js +0 -213
- package/lib/DboBuilder/ViewHandler.d.ts +0 -119
- package/lib/DboBuilder/ViewHandler.d.ts.map +0 -1
- package/lib/DboBuilder/ViewHandler.js +0 -1023
- package/lib/DboBuilder/delete.d.ts +0 -6
- package/lib/DboBuilder/delete.d.ts.map +0 -1
- package/lib/DboBuilder/delete.js +0 -128
- package/lib/DboBuilder/find.d.ts +0 -8
- package/lib/DboBuilder/find.d.ts.map +0 -1
- package/lib/DboBuilder/find.js +0 -91
- package/lib/DboBuilder/getColumns.d.ts +0 -12
- package/lib/DboBuilder/getColumns.d.ts.map +0 -1
- package/lib/DboBuilder/getColumns.js +0 -92
- package/lib/DboBuilder/getCondition.d.ts +0 -22
- package/lib/DboBuilder/getCondition.d.ts.map +0 -1
- package/lib/DboBuilder/getCondition.js +0 -236
- package/lib/DboBuilder/getSubscribeRelatedTables.d.ts +0 -20
- package/lib/DboBuilder/getSubscribeRelatedTables.d.ts.map +0 -1
- package/lib/DboBuilder/getSubscribeRelatedTables.js +0 -152
- package/lib/DboBuilder/getTablesForSchemaPostgresSQL.d.ts +0 -3
- package/lib/DboBuilder/getTablesForSchemaPostgresSQL.d.ts.map +0 -1
- package/lib/DboBuilder/getTablesForSchemaPostgresSQL.js +0 -207
- package/lib/DboBuilder/insert.d.ts +0 -6
- package/lib/DboBuilder/insert.d.ts.map +0 -1
- package/lib/DboBuilder/insert.js +0 -180
- package/lib/DboBuilder/insertDataParse.d.ts +0 -12
- package/lib/DboBuilder/insertDataParse.d.ts.map +0 -1
- package/lib/DboBuilder/insertDataParse.js +0 -253
- package/lib/DboBuilder/parseUpdateRules.d.ts +0 -18
- package/lib/DboBuilder/parseUpdateRules.d.ts.map +0 -1
- package/lib/DboBuilder/parseUpdateRules.js +0 -123
- package/lib/DboBuilder/runSQL.d.ts +0 -7
- package/lib/DboBuilder/runSQL.d.ts.map +0 -1
- package/lib/DboBuilder/runSQL.js +0 -135
- package/lib/DboBuilder/subscribe.d.ts +0 -20
- package/lib/DboBuilder/subscribe.d.ts.map +0 -1
- package/lib/DboBuilder/subscribe.js +0 -90
- package/lib/DboBuilder/update.d.ts +0 -6
- package/lib/DboBuilder/update.d.ts.map +0 -1
- package/lib/DboBuilder/update.js +0 -151
- package/lib/DboBuilder/uploadFile.d.ts +0 -7
- package/lib/DboBuilder/uploadFile.d.ts.map +0 -1
- package/lib/DboBuilder/uploadFile.js +0 -53
- package/lib/DboBuilder.d.ts +0 -306
- package/lib/DboBuilder.d.ts.map +0 -1
- package/lib/DboBuilder.js +0 -745
- package/lib/Event_Trigger_Tags.d.ts +0 -4
- package/lib/Event_Trigger_Tags.d.ts.map +0 -1
- package/lib/Event_Trigger_Tags.js +0 -116
- package/lib/FileManager/FileManager.d.ts +0 -135
- package/lib/FileManager/FileManager.d.ts.map +0 -1
- package/lib/FileManager/FileManager.js +0 -303
- package/lib/FileManager/initFileManager.d.ts +0 -4
- package/lib/FileManager/initFileManager.d.ts.map +0 -1
- package/lib/FileManager/initFileManager.js +0 -231
- package/lib/FileManager/parseFile.d.ts +0 -15
- package/lib/FileManager/parseFile.d.ts.map +0 -1
- package/lib/FileManager/parseFile.js +0 -58
- package/lib/FileManager/upload.d.ts +0 -6
- package/lib/FileManager/upload.d.ts.map +0 -1
- package/lib/FileManager/upload.js +0 -98
- package/lib/FileManager/uploadStream.d.ts +0 -5
- package/lib/FileManager/uploadStream.d.ts.map +0 -1
- package/lib/FileManager/uploadStream.js +0 -92
- package/lib/Filtering.d.ts +0 -15
- package/lib/Filtering.d.ts.map +0 -1
- package/lib/Filtering.js +0 -336
- package/lib/JSONBValidation/validate_jsonb_schema_sql.d.ts +0 -4
- package/lib/JSONBValidation/validate_jsonb_schema_sql.d.ts.map +0 -1
- package/lib/JSONBValidation/validate_jsonb_schema_sql.js +0 -500
- package/lib/JSONBValidation/validation.d.ts +0 -9
- package/lib/JSONBValidation/validation.d.ts.map +0 -1
- package/lib/JSONBValidation/validation.js +0 -131
- package/lib/PostgresNotifListenManager.d.ts +0 -28
- package/lib/PostgresNotifListenManager.d.ts.map +0 -1
- package/lib/PostgresNotifListenManager.js +0 -134
- package/lib/Prostgles.d.ts +0 -289
- package/lib/Prostgles.d.ts.map +0 -1
- package/lib/Prostgles.js +0 -685
- package/lib/PubSubManager/PubSubManager.d.ts +0 -175
- package/lib/PubSubManager/PubSubManager.d.ts.map +0 -1
- package/lib/PubSubManager/PubSubManager.js +0 -452
- package/lib/PubSubManager/addSub.d.ts +0 -8
- package/lib/PubSubManager/addSub.d.ts.map +0 -1
- package/lib/PubSubManager/addSub.js +0 -166
- package/lib/PubSubManager/addSync.d.ts +0 -8
- package/lib/PubSubManager/addSync.d.ts.map +0 -1
- package/lib/PubSubManager/addSync.js +0 -109
- package/lib/PubSubManager/getInitQuery.d.ts +0 -9
- package/lib/PubSubManager/getInitQuery.d.ts.map +0 -1
- package/lib/PubSubManager/getInitQuery.js +0 -552
- package/lib/PubSubManager/initPubSubManager.d.ts +0 -3
- package/lib/PubSubManager/initPubSubManager.d.ts.map +0 -1
- package/lib/PubSubManager/initPubSubManager.js +0 -116
- package/lib/PubSubManager/notifListener.d.ts +0 -5
- package/lib/PubSubManager/notifListener.d.ts.map +0 -1
- package/lib/PubSubManager/notifListener.js +0 -100
- package/lib/PubSubManager/pushSubData.d.ts +0 -3
- package/lib/PubSubManager/pushSubData.d.ts.map +0 -1
- package/lib/PubSubManager/pushSubData.js +0 -51
- package/lib/PublishParser.d.ts +0 -284
- package/lib/PublishParser.d.ts.map +0 -1
- package/lib/PublishParser.js +0 -421
- package/lib/SchemaWatch.d.ts +0 -13
- package/lib/SchemaWatch.d.ts.map +0 -1
- package/lib/SchemaWatch.js +0 -35
- package/lib/SyncReplication.d.ts +0 -34
- package/lib/SyncReplication.d.ts.map +0 -1
- package/lib/SyncReplication.js +0 -412
- package/lib/TableConfig/TableConfig.d.ts +0 -284
- package/lib/TableConfig/TableConfig.d.ts.map +0 -1
- package/lib/TableConfig/TableConfig.js +0 -437
- package/lib/TableConfig/getColumnDefinitionQuery.d.ts +0 -27
- package/lib/TableConfig/getColumnDefinitionQuery.d.ts.map +0 -1
- package/lib/TableConfig/getColumnDefinitionQuery.js +0 -87
- package/lib/TableConfig/getConstraintDefinitionQueries.d.ts +0 -34
- package/lib/TableConfig/getConstraintDefinitionQueries.d.ts.map +0 -1
- package/lib/TableConfig/getConstraintDefinitionQueries.js +0 -65
- package/lib/TableConfig/getFutureTableSchema.d.ts +0 -15
- package/lib/TableConfig/getFutureTableSchema.d.ts.map +0 -1
- package/lib/TableConfig/getFutureTableSchema.js +0 -43
- package/lib/TableConfig/getTableColumnQueries.d.ts +0 -16
- package/lib/TableConfig/getTableColumnQueries.d.ts.map +0 -1
- package/lib/TableConfig/getTableColumnQueries.js +0 -107
- package/lib/index.d.ts +0 -5
- package/lib/index.d.ts.map +0 -1
- package/lib/index.js +0 -7
- package/lib/shortestPath.d.ts +0 -10
- package/lib/shortestPath.d.ts.map +0 -1
- package/lib/shortestPath.js +0 -111
- package/lib/utils.d.ts +0 -3
- package/lib/utils.d.ts.map +0 -1
- package/lib/utils.js +0 -12
- package/tests/client/index.d.ts +0 -2
- package/tests/client/index.d.ts.map +0 -1
- package/tests/client/index.js +0 -80
- package/tests/client/index.js.map +0 -1
- package/tests/client_only_queries.d.ts +0 -4
- package/tests/client_only_queries.d.ts.map +0 -1
- package/tests/client_only_queries.js +0 -282
- package/tests/config_test/DBoGenerated.d.ts +0 -388
- package/tests/config_test/index.js +0 -174
- package/tests/config_test/index.js.map +0 -1
- package/tests/isomorphic_queries.d.ts +0 -9
- package/tests/isomorphic_queries.d.ts.map +0 -1
- package/tests/isomorphic_queries.js +0 -773
- package/tests/manual_test/DBoGenerated.d.ts +0 -398
- package/tests/manual_test/index.d.ts +0 -2
- package/tests/manual_test/index.d.ts.map +0 -1
- package/tests/manual_test/index.js +0 -65
- package/tests/server/dboTypeCheck.d.ts +0 -2
- package/tests/server/dboTypeCheck.d.ts.map +0 -1
- package/tests/server/dboTypeCheck.js +0 -27
- package/tests/server/index.d.ts +0 -2
- package/tests/server/index.d.ts.map +0 -1
- package/tests/server/index.js +0 -507
- package/tests/server/publishTypeCheck.d.ts +0 -2
- package/tests/server/publishTypeCheck.d.ts.map +0 -1
- package/tests/server/publishTypeCheck.js +0 -130
- package/tests/server_only_queries.d.ts +0 -2
- package/tests/server_only_queries.d.ts.map +0 -1
- package/tests/server_only_queries.js +0 -19
|
@@ -1,175 +0,0 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
|
-
import { PostgresNotifListenManager } from "../PostgresNotifListenManager";
|
|
3
|
-
import { TableOrViewInfo, TableInfo, DBHandlerServer, DboBuilder, PRGLIOSocket } from "../DboBuilder";
|
|
4
|
-
import { DB } from "../Prostgles";
|
|
5
|
-
import { SelectParams, FieldFilter, WAL, AnyObject, SubscribeParams } from "prostgles-types";
|
|
6
|
-
import { ClientExpressData } from "../SyncReplication";
|
|
7
|
-
import { TableRule } from "../PublishParser";
|
|
8
|
-
import { LocalFuncs } from "../DboBuilder/subscribe";
|
|
9
|
-
export declare const asValue: (v: any) => string;
|
|
10
|
-
export declare const DEFAULT_SYNC_BATCH_SIZE = 50;
|
|
11
|
-
export declare const log: (...args: any[]) => void;
|
|
12
|
-
export type BasicCallback = (err?: any, res?: any) => void;
|
|
13
|
-
export type SyncParams = {
|
|
14
|
-
socket_id: string;
|
|
15
|
-
channel_name: string;
|
|
16
|
-
table_name: string;
|
|
17
|
-
table_rules?: TableRule;
|
|
18
|
-
synced_field: string;
|
|
19
|
-
allow_delete: boolean;
|
|
20
|
-
id_fields: string[];
|
|
21
|
-
batch_size: number;
|
|
22
|
-
filter: object;
|
|
23
|
-
params: {
|
|
24
|
-
select: FieldFilter;
|
|
25
|
-
};
|
|
26
|
-
condition: string;
|
|
27
|
-
wal?: WAL;
|
|
28
|
-
throttle?: number;
|
|
29
|
-
lr?: AnyObject;
|
|
30
|
-
last_synced: number;
|
|
31
|
-
is_syncing: boolean;
|
|
32
|
-
};
|
|
33
|
-
export type AddSyncParams = {
|
|
34
|
-
socket: any;
|
|
35
|
-
table_info: TableInfo;
|
|
36
|
-
table_rules: TableRule;
|
|
37
|
-
synced_field: string;
|
|
38
|
-
allow_delete?: boolean;
|
|
39
|
-
id_fields: string[];
|
|
40
|
-
filter: object;
|
|
41
|
-
params: {
|
|
42
|
-
select: FieldFilter;
|
|
43
|
-
};
|
|
44
|
-
condition: string;
|
|
45
|
-
throttle?: number;
|
|
46
|
-
};
|
|
47
|
-
export type ViewSubscriptionOptions = ({
|
|
48
|
-
type: "view";
|
|
49
|
-
viewName: string;
|
|
50
|
-
definition: string;
|
|
51
|
-
} | {
|
|
52
|
-
type: "table";
|
|
53
|
-
viewName?: undefined;
|
|
54
|
-
definition?: undefined;
|
|
55
|
-
}) & {
|
|
56
|
-
relatedTables: {
|
|
57
|
-
tableName: string;
|
|
58
|
-
tableNameEscaped: string;
|
|
59
|
-
condition: string;
|
|
60
|
-
}[];
|
|
61
|
-
};
|
|
62
|
-
export type SubscriptionParams = Pick<SubscribeParams, "throttle" | "throttleOpts"> & {
|
|
63
|
-
socket_id?: string;
|
|
64
|
-
channel_name: string;
|
|
65
|
-
/**
|
|
66
|
-
* If this is a view then an array with all related tables will be
|
|
67
|
-
* */
|
|
68
|
-
viewOptions?: ViewSubscriptionOptions;
|
|
69
|
-
parentSubParams: Omit<SubscriptionParams, "parentSubParams"> | undefined;
|
|
70
|
-
table_info: TableOrViewInfo;
|
|
71
|
-
table_rules?: TableRule;
|
|
72
|
-
filter: object;
|
|
73
|
-
params: SelectParams;
|
|
74
|
-
localFuncs?: LocalFuncs;
|
|
75
|
-
socket: PRGLIOSocket | undefined;
|
|
76
|
-
last_throttled: number;
|
|
77
|
-
is_throttling?: any;
|
|
78
|
-
is_ready?: boolean;
|
|
79
|
-
};
|
|
80
|
-
export type PubSubManagerOptions = {
|
|
81
|
-
dboBuilder: DboBuilder;
|
|
82
|
-
wsChannelNamePrefix?: string;
|
|
83
|
-
pgChannelName?: string;
|
|
84
|
-
onSchemaChange?: (event: {
|
|
85
|
-
command: string;
|
|
86
|
-
query: string;
|
|
87
|
-
}) => void;
|
|
88
|
-
};
|
|
89
|
-
export type Subscription = Pick<SubscriptionParams, "throttle" | "is_throttling" | "last_throttled" | "throttleOpts" | "channel_name" | "is_ready" | "localFuncs" | "socket" | "socket_id" | "table_info" | "filter" | "params" | "table_rules"> & {
|
|
90
|
-
triggers: {
|
|
91
|
-
table_name: string;
|
|
92
|
-
condition: string;
|
|
93
|
-
is_related: boolean;
|
|
94
|
-
}[];
|
|
95
|
-
};
|
|
96
|
-
export declare class PubSubManager {
|
|
97
|
-
static DELIMITER: "|$prstgls$|";
|
|
98
|
-
dboBuilder: DboBuilder;
|
|
99
|
-
get db(): DB;
|
|
100
|
-
get dbo(): DBHandlerServer;
|
|
101
|
-
_triggers?: Record<string, string[]>;
|
|
102
|
-
sockets: AnyObject;
|
|
103
|
-
subs: Subscription[];
|
|
104
|
-
syncs: SyncParams[];
|
|
105
|
-
socketChannelPreffix: string;
|
|
106
|
-
onSchemaChange?: ((event: {
|
|
107
|
-
command: string;
|
|
108
|
-
query: string;
|
|
109
|
-
}) => void);
|
|
110
|
-
postgresNotifListenManager?: PostgresNotifListenManager;
|
|
111
|
-
private constructor();
|
|
112
|
-
NOTIF_TYPE: {
|
|
113
|
-
readonly data: "data_has_changed";
|
|
114
|
-
readonly schema: "schema_has_changed";
|
|
115
|
-
};
|
|
116
|
-
NOTIF_CHANNEL: {
|
|
117
|
-
preffix: "prostgles_";
|
|
118
|
-
getFull: (appID?: string) => string;
|
|
119
|
-
};
|
|
120
|
-
/**
|
|
121
|
-
* Used facilitate concurrent prostgles connections to the same database
|
|
122
|
-
*/
|
|
123
|
-
appID?: string;
|
|
124
|
-
appCheckFrequencyMS: number;
|
|
125
|
-
appCheck?: ReturnType<typeof setInterval>;
|
|
126
|
-
static canCreate: (db: DB) => Promise<{
|
|
127
|
-
canExecute: boolean;
|
|
128
|
-
isSuperUs: boolean;
|
|
129
|
-
yes: boolean;
|
|
130
|
-
}>;
|
|
131
|
-
static create: (options: PubSubManagerOptions) => Promise<any>;
|
|
132
|
-
destroyed: boolean;
|
|
133
|
-
destroy: () => void;
|
|
134
|
-
canContinue: () => boolean;
|
|
135
|
-
appChecking: boolean;
|
|
136
|
-
checkedListenerTableCond?: string[];
|
|
137
|
-
init: any;
|
|
138
|
-
static SCHEMA_ALTERING_QUERIES: string[];
|
|
139
|
-
static EXCLUDE_QUERY_FROM_SCHEMA_WATCH_ID: string;
|
|
140
|
-
prepareTriggers: () => Promise<boolean>;
|
|
141
|
-
isReady(): any;
|
|
142
|
-
getClientSubs(client: Pick<Subscription, "localFuncs" | "socket_id" | "channel_name">): Subscription[];
|
|
143
|
-
getTriggerSubs(table_name: string, condition: string): Subscription[];
|
|
144
|
-
removeLocalSub(channelName: string, localFuncs: LocalFuncs): void;
|
|
145
|
-
getSyncs(table_name: string, condition: string): SyncParams[];
|
|
146
|
-
notifListener: any;
|
|
147
|
-
getSubData: (sub: Subscription) => Promise<{
|
|
148
|
-
data: any[];
|
|
149
|
-
err?: undefined;
|
|
150
|
-
} | {
|
|
151
|
-
data?: undefined;
|
|
152
|
-
err: any;
|
|
153
|
-
}>;
|
|
154
|
-
pushSubData: any;
|
|
155
|
-
upsertSocket(socket: any): void;
|
|
156
|
-
syncTimeout?: ReturnType<typeof setTimeout>;
|
|
157
|
-
syncData(sync: SyncParams, clientData: ClientExpressData | undefined, source: "trigger" | "client"): Promise<void>;
|
|
158
|
-
addSync: any;
|
|
159
|
-
addSub: any;
|
|
160
|
-
getActiveListeners: () => {
|
|
161
|
-
table_name: string;
|
|
162
|
-
condition: string;
|
|
163
|
-
}[];
|
|
164
|
-
checkIfTimescaleBug: (table_name: string) => Promise<boolean>;
|
|
165
|
-
getMyTriggerQuery: () => Promise<string>;
|
|
166
|
-
addingTrigger: any;
|
|
167
|
-
addTriggerPool?: Record<string, string[]>;
|
|
168
|
-
addTrigger(params: {
|
|
169
|
-
table_name: string;
|
|
170
|
-
condition: string;
|
|
171
|
-
}, viewOptions?: ViewSubscriptionOptions): Promise<boolean>;
|
|
172
|
-
}
|
|
173
|
-
export declare const parseCondition: (condition: string) => string;
|
|
174
|
-
export { pickKeys, omitKeys } from "prostgles-types";
|
|
175
|
-
//# sourceMappingURL=PubSubManager.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"PubSubManager.d.ts","sourceRoot":"","sources":["PubSubManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,452 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/*---------------------------------------------------------------------------------------------
|
|
3
|
-
* Copyright (c) Stefan L. All rights reserved.
|
|
4
|
-
* Licensed under the MIT License. See LICENSE in the project root for license information.
|
|
5
|
-
*--------------------------------------------------------------------------------------------*/
|
|
6
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
-
if (k2 === undefined) k2 = k;
|
|
8
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
-
}
|
|
12
|
-
Object.defineProperty(o, k2, desc);
|
|
13
|
-
}) : (function(o, m, k, k2) {
|
|
14
|
-
if (k2 === undefined) k2 = k;
|
|
15
|
-
o[k2] = m[k];
|
|
16
|
-
}));
|
|
17
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
18
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
19
|
-
}) : function(o, v) {
|
|
20
|
-
o["default"] = v;
|
|
21
|
-
});
|
|
22
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
23
|
-
if (mod && mod.__esModule) return mod;
|
|
24
|
-
var result = {};
|
|
25
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
26
|
-
__setModuleDefault(result, mod);
|
|
27
|
-
return result;
|
|
28
|
-
};
|
|
29
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
30
|
-
exports.omitKeys = exports.pickKeys = exports.parseCondition = exports.PubSubManager = exports.log = exports.DEFAULT_SYNC_BATCH_SIZE = exports.asValue = void 0;
|
|
31
|
-
const addSync_1 = require("./addSync");
|
|
32
|
-
const DboBuilder_1 = require("../DboBuilder");
|
|
33
|
-
const Prostgles_1 = require("../Prostgles");
|
|
34
|
-
const initPubSubManager_1 = require("./initPubSubManager");
|
|
35
|
-
const Bluebird = __importStar(require("bluebird"));
|
|
36
|
-
const pgPromise = __importStar(require("pg-promise"));
|
|
37
|
-
const prostgles_types_1 = require("prostgles-types");
|
|
38
|
-
const SyncReplication_1 = require("../SyncReplication");
|
|
39
|
-
const util_1 = require("prostgles-types/dist/util");
|
|
40
|
-
const getInitQuery_1 = require("./getInitQuery");
|
|
41
|
-
const addSub_1 = require("./addSub");
|
|
42
|
-
const notifListener_1 = require("./notifListener");
|
|
43
|
-
const pushSubData_1 = require("./pushSubData");
|
|
44
|
-
const subscribe_1 = require("../DboBuilder/subscribe");
|
|
45
|
-
const Event_Trigger_Tags_1 = require("../Event_Trigger_Tags");
|
|
46
|
-
const pgp = pgPromise({
|
|
47
|
-
promiseLib: Bluebird
|
|
48
|
-
});
|
|
49
|
-
const asValue = (v) => pgp.as.format("$1", [v]);
|
|
50
|
-
exports.asValue = asValue;
|
|
51
|
-
exports.DEFAULT_SYNC_BATCH_SIZE = 50;
|
|
52
|
-
const log = (...args) => {
|
|
53
|
-
if (process.env.TEST_TYPE) {
|
|
54
|
-
console.log(...args);
|
|
55
|
-
}
|
|
56
|
-
};
|
|
57
|
-
exports.log = log;
|
|
58
|
-
class PubSubManager {
|
|
59
|
-
static DELIMITER = '|$prstgls$|';
|
|
60
|
-
dboBuilder;
|
|
61
|
-
get db() {
|
|
62
|
-
return this.dboBuilder.db;
|
|
63
|
-
}
|
|
64
|
-
get dbo() {
|
|
65
|
-
return this.dboBuilder.dbo;
|
|
66
|
-
}
|
|
67
|
-
_triggers;
|
|
68
|
-
sockets = {};
|
|
69
|
-
// subs: { [ke: string]: { [ke: string]: { subs: SubscriptionParams[] } } };
|
|
70
|
-
subs = [];
|
|
71
|
-
syncs = [];
|
|
72
|
-
socketChannelPreffix;
|
|
73
|
-
onSchemaChange = undefined;
|
|
74
|
-
postgresNotifListenManager;
|
|
75
|
-
constructor(options) {
|
|
76
|
-
const { wsChannelNamePrefix, onSchemaChange, dboBuilder } = options;
|
|
77
|
-
if (!dboBuilder.db || !dboBuilder.dbo) {
|
|
78
|
-
throw 'MISSING: db_pg, db';
|
|
79
|
-
}
|
|
80
|
-
this.onSchemaChange = onSchemaChange;
|
|
81
|
-
this.dboBuilder = dboBuilder;
|
|
82
|
-
this.socketChannelPreffix = wsChannelNamePrefix || "_psqlWS_";
|
|
83
|
-
(0, exports.log)("Created PubSubManager");
|
|
84
|
-
}
|
|
85
|
-
NOTIF_TYPE = {
|
|
86
|
-
data: "data_has_changed",
|
|
87
|
-
schema: "schema_has_changed"
|
|
88
|
-
};
|
|
89
|
-
NOTIF_CHANNEL = {
|
|
90
|
-
preffix: 'prostgles_',
|
|
91
|
-
getFull: (appID) => {
|
|
92
|
-
const finalAppId = appID ?? this.appID;
|
|
93
|
-
if (!finalAppId)
|
|
94
|
-
throw "No appID";
|
|
95
|
-
return this.NOTIF_CHANNEL.preffix + finalAppId;
|
|
96
|
-
}
|
|
97
|
-
};
|
|
98
|
-
/**
|
|
99
|
-
* Used facilitate concurrent prostgles connections to the same database
|
|
100
|
-
*/
|
|
101
|
-
appID;
|
|
102
|
-
appCheckFrequencyMS = 10 * 1000;
|
|
103
|
-
appCheck;
|
|
104
|
-
// ,datname
|
|
105
|
-
// ,usename
|
|
106
|
-
// ,client_hostname
|
|
107
|
-
// ,client_port
|
|
108
|
-
// ,backend_start
|
|
109
|
-
// ,query_start
|
|
110
|
-
// ,query
|
|
111
|
-
// ,state
|
|
112
|
-
// console.log(await _db.any(`
|
|
113
|
-
// SELECT pid, application_name, state
|
|
114
|
-
// FROM pg_stat_activity
|
|
115
|
-
// WHERE application_name IS NOT NULL AND application_name != '' -- state = 'active';
|
|
116
|
-
// `))
|
|
117
|
-
static canCreate = async (db) => {
|
|
118
|
-
const canExecute = await (0, DboBuilder_1.canEXECUTE)(db);
|
|
119
|
-
const isSuperUs = await (0, Prostgles_1.isSuperUser)(db);
|
|
120
|
-
return { canExecute, isSuperUs, yes: canExecute && isSuperUs };
|
|
121
|
-
};
|
|
122
|
-
static create = async (options) => {
|
|
123
|
-
const res = new PubSubManager(options);
|
|
124
|
-
return await res.init();
|
|
125
|
-
};
|
|
126
|
-
destroyed = false;
|
|
127
|
-
destroy = () => {
|
|
128
|
-
this.destroyed = true;
|
|
129
|
-
if (this.appCheck) {
|
|
130
|
-
clearInterval(this.appCheck);
|
|
131
|
-
}
|
|
132
|
-
this.subs = [];
|
|
133
|
-
this.syncs = [];
|
|
134
|
-
if (!this.postgresNotifListenManager) {
|
|
135
|
-
throw "this.postgresNotifListenManager missing";
|
|
136
|
-
}
|
|
137
|
-
this.postgresNotifListenManager.destroy();
|
|
138
|
-
};
|
|
139
|
-
canContinue = () => {
|
|
140
|
-
if (this.destroyed) {
|
|
141
|
-
console.trace("Could not start destroyed instance");
|
|
142
|
-
return false;
|
|
143
|
-
}
|
|
144
|
-
return true;
|
|
145
|
-
};
|
|
146
|
-
appChecking = false;
|
|
147
|
-
checkedListenerTableCond;
|
|
148
|
-
init = initPubSubManager_1.initPubSubManager.bind(this);
|
|
149
|
-
static SCHEMA_ALTERING_QUERIES = ['CREATE TABLE', 'ALTER TABLE', 'DROP TABLE', 'CREATE VIEW', 'DROP VIEW', 'ALTER VIEW', 'CREATE TABLE AS', 'SELECT INTO'];
|
|
150
|
-
static EXCLUDE_QUERY_FROM_SCHEMA_WATCH_ID = "prostgles internal query that should be excluded from schema watch ";
|
|
151
|
-
prepareTriggers = async () => {
|
|
152
|
-
// SELECT * FROM pg_catalog.pg_event_trigger WHERE evtname
|
|
153
|
-
if (!this.appID)
|
|
154
|
-
throw "prepareTriggers failed: this.appID missing";
|
|
155
|
-
const { watchSchema } = this.dboBuilder.prostgles.opts;
|
|
156
|
-
if (watchSchema && !(await (0, Prostgles_1.isSuperUser)(this.db))) {
|
|
157
|
-
console.warn("prostgles watchSchema requires superuser db user. Will not watch using event triggers");
|
|
158
|
-
}
|
|
159
|
-
let EVENT_TAGS = ['COMMENT', 'CREATE TABLE', 'ALTER TABLE', 'DROP TABLE', 'CREATE VIEW', 'DROP VIEW', 'ALTER VIEW', 'CREATE TABLE AS', 'SELECT INTO'];
|
|
160
|
-
if (watchSchema === "*") {
|
|
161
|
-
EVENT_TAGS = Event_Trigger_Tags_1.EVENT_TRIGGER_TAGS.slice(0);
|
|
162
|
-
}
|
|
163
|
-
else if ((0, util_1.isObject)(watchSchema) && typeof watchSchema !== "function") {
|
|
164
|
-
const isInclusive = Object.values(watchSchema).every(v => v);
|
|
165
|
-
const watchSchemaKeys = (0, util_1.getKeys)(watchSchema);
|
|
166
|
-
if (isInclusive)
|
|
167
|
-
EVENT_TAGS = watchSchemaKeys;
|
|
168
|
-
else
|
|
169
|
-
EVENT_TAGS = Event_Trigger_Tags_1.EVENT_TRIGGER_TAGS.slice(0).filter(v => !watchSchemaKeys.includes(v));
|
|
170
|
-
}
|
|
171
|
-
try {
|
|
172
|
-
await this.db.any(`
|
|
173
|
-
BEGIN;-- ISOLATION LEVEL SERIALIZABLE;
|
|
174
|
-
|
|
175
|
-
/**
|
|
176
|
-
* ${PubSubManager.EXCLUDE_QUERY_FROM_SCHEMA_WATCH_ID}
|
|
177
|
-
* Drop stale triggers
|
|
178
|
-
* */
|
|
179
|
-
DO
|
|
180
|
-
$do$
|
|
181
|
-
DECLARE trg RECORD;
|
|
182
|
-
q TEXT;
|
|
183
|
-
ev_trg_needed BOOLEAN := FALSE;
|
|
184
|
-
ev_trg_exists BOOLEAN := FALSE;
|
|
185
|
-
is_super_user BOOLEAN := FALSE;
|
|
186
|
-
BEGIN
|
|
187
|
-
--SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
|
|
188
|
-
|
|
189
|
-
LOCK TABLE prostgles.app_triggers IN ACCESS EXCLUSIVE MODE;
|
|
190
|
-
EXECUTE format(
|
|
191
|
-
$q$
|
|
192
|
-
|
|
193
|
-
CREATE TEMP TABLE %1$I AS --ON COMMIT DROP AS
|
|
194
|
-
SELECT * FROM prostgles.app_triggers;
|
|
195
|
-
|
|
196
|
-
DELETE FROM prostgles.app_triggers;
|
|
197
|
-
|
|
198
|
-
INSERT INTO prostgles.app_triggers
|
|
199
|
-
SELECT * FROM %1$I;
|
|
200
|
-
|
|
201
|
-
DROP TABLE IF EXISTS %1$I;
|
|
202
|
-
$q$,
|
|
203
|
-
${(0, exports.asValue)('triggers_' + this.appID)}
|
|
204
|
-
);
|
|
205
|
-
|
|
206
|
-
is_super_user := EXISTS (select 1 from pg_user where usename = CURRENT_USER AND usesuper IS TRUE);
|
|
207
|
-
|
|
208
|
-
/**
|
|
209
|
-
* Delete stale app records, this will delete related triggers
|
|
210
|
-
* */
|
|
211
|
-
DELETE FROM prostgles.apps
|
|
212
|
-
WHERE last_check < NOW() - 8 * check_frequency_ms * interval '1 millisecond';
|
|
213
|
-
|
|
214
|
-
DELETE FROM prostgles.app_triggers
|
|
215
|
-
WHERE app_id NOT IN (SELECT id FROM prostgles.apps);
|
|
216
|
-
|
|
217
|
-
/* DROP the old buggy schema watch trigger */
|
|
218
|
-
IF EXISTS (
|
|
219
|
-
SELECT 1 FROM pg_catalog.pg_event_trigger
|
|
220
|
-
WHERE evtname = 'prostgles_schema_watch_trigger'
|
|
221
|
-
) AND is_super_user IS TRUE
|
|
222
|
-
THEN
|
|
223
|
-
DROP EVENT TRIGGER IF EXISTS prostgles_schema_watch_trigger;
|
|
224
|
-
END IF;
|
|
225
|
-
|
|
226
|
-
ev_trg_needed := EXISTS (SELECT 1 FROM prostgles.apps WHERE watching_schema IS TRUE);
|
|
227
|
-
ev_trg_exists := EXISTS (
|
|
228
|
-
SELECT 1 FROM pg_catalog.pg_event_trigger
|
|
229
|
-
WHERE evtname = ${(0, exports.asValue)(getInitQuery_1.DB_OBJ_NAMES.schema_watch_trigger)}
|
|
230
|
-
);
|
|
231
|
-
|
|
232
|
-
-- RAISE NOTICE ' ev_trg_needed %, ev_trg_exists %', ev_trg_needed, ev_trg_exists;
|
|
233
|
-
|
|
234
|
-
/**
|
|
235
|
-
* DROP stale event trigger
|
|
236
|
-
* */
|
|
237
|
-
IF is_super_user IS TRUE AND ev_trg_needed IS FALSE AND ev_trg_exists IS TRUE THEN
|
|
238
|
-
|
|
239
|
-
SELECT format(
|
|
240
|
-
$$ DROP EVENT TRIGGER IF EXISTS %I ; $$
|
|
241
|
-
, ${(0, exports.asValue)(getInitQuery_1.DB_OBJ_NAMES.schema_watch_trigger)}
|
|
242
|
-
)
|
|
243
|
-
INTO q;
|
|
244
|
-
|
|
245
|
-
--RAISE NOTICE ' DROP EVENT TRIGGER %', q;
|
|
246
|
-
|
|
247
|
-
EXECUTE q;
|
|
248
|
-
|
|
249
|
-
/**
|
|
250
|
-
* CREATE event trigger
|
|
251
|
-
* */
|
|
252
|
-
ELSIF
|
|
253
|
-
is_super_user IS TRUE
|
|
254
|
-
AND ev_trg_needed IS TRUE
|
|
255
|
-
AND ev_trg_exists IS FALSE
|
|
256
|
-
THEN
|
|
257
|
-
|
|
258
|
-
DROP EVENT TRIGGER IF EXISTS ${getInitQuery_1.DB_OBJ_NAMES.schema_watch_trigger};
|
|
259
|
-
CREATE EVENT TRIGGER ${getInitQuery_1.DB_OBJ_NAMES.schema_watch_trigger} ON ddl_command_end
|
|
260
|
-
WHEN TAG IN (\${EVENT_TAGS:csv})
|
|
261
|
-
--WHEN TAG IN ('CREATE TABLE', 'ALTER TABLE', 'DROP TABLE', 'CREATE TRIGGER', 'DROP TRIGGER')
|
|
262
|
-
EXECUTE PROCEDURE ${getInitQuery_1.DB_OBJ_NAMES.schema_watch_func}();
|
|
263
|
-
|
|
264
|
-
--RAISE NOTICE ' CREATED EVENT TRIGGER %', q;
|
|
265
|
-
END IF;
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
END
|
|
269
|
-
$do$;
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
COMMIT;
|
|
273
|
-
`, { EVENT_TAGS }).catch(e => {
|
|
274
|
-
console.error("prepareTriggers failed: ", e);
|
|
275
|
-
throw e;
|
|
276
|
-
});
|
|
277
|
-
return true;
|
|
278
|
-
}
|
|
279
|
-
catch (e) {
|
|
280
|
-
console.error("prepareTriggers failed: ", e);
|
|
281
|
-
throw e;
|
|
282
|
-
}
|
|
283
|
-
};
|
|
284
|
-
isReady() {
|
|
285
|
-
if (!this.postgresNotifListenManager)
|
|
286
|
-
throw "this.postgresNotifListenManager missing";
|
|
287
|
-
return this.postgresNotifListenManager.isListening();
|
|
288
|
-
}
|
|
289
|
-
getClientSubs(client) {
|
|
290
|
-
return this.subs.filter(s => {
|
|
291
|
-
return s.channel_name === client.channel_name && ((0, subscribe_1.matchesLocalFuncs)(client.localFuncs, s.localFuncs) || client.socket_id && s.socket_id === client.socket_id);
|
|
292
|
-
});
|
|
293
|
-
}
|
|
294
|
-
getTriggerSubs(table_name, condition) {
|
|
295
|
-
const subs = this.subs.filter(s => (0, util_1.find)(s.triggers, { table_name, condition }));
|
|
296
|
-
return subs;
|
|
297
|
-
}
|
|
298
|
-
removeLocalSub(channelName, localFuncs) {
|
|
299
|
-
const matchingSubIdx = this.subs.findIndex(s => s.channel_name === channelName &&
|
|
300
|
-
(0, subscribe_1.getOnDataFunc)(localFuncs) === (0, subscribe_1.getOnDataFunc)(s.localFuncs));
|
|
301
|
-
if (matchingSubIdx > -1) {
|
|
302
|
-
this.subs.splice(matchingSubIdx, 1);
|
|
303
|
-
}
|
|
304
|
-
else {
|
|
305
|
-
console.error("Could not unsubscribe. Subscription might not have initialised yet", { channelName });
|
|
306
|
-
}
|
|
307
|
-
}
|
|
308
|
-
getSyncs(table_name, condition) {
|
|
309
|
-
return (this.syncs || [])
|
|
310
|
-
.filter((s) => s.table_name === table_name && s.condition === condition);
|
|
311
|
-
}
|
|
312
|
-
notifListener = notifListener_1.notifListener.bind(this);
|
|
313
|
-
getSubData = async (sub) => {
|
|
314
|
-
const { table_info, filter, params, table_rules } = sub; //, subOne = false
|
|
315
|
-
const { name: table_name } = table_info;
|
|
316
|
-
if (!this.dbo?.[table_name]?.find) {
|
|
317
|
-
throw new Error(`1107 this.dbo.${table_name}.find`);
|
|
318
|
-
}
|
|
319
|
-
try {
|
|
320
|
-
const data = await this.dbo?.[table_name].find(filter, params, undefined, table_rules);
|
|
321
|
-
return { data };
|
|
322
|
-
}
|
|
323
|
-
catch (err) {
|
|
324
|
-
return { err };
|
|
325
|
-
}
|
|
326
|
-
};
|
|
327
|
-
pushSubData = pushSubData_1.pushSubData.bind(this);
|
|
328
|
-
upsertSocket(socket) {
|
|
329
|
-
if (socket && !this.sockets[socket.id]) {
|
|
330
|
-
this.sockets[socket.id] = socket;
|
|
331
|
-
socket.on("disconnect", () => {
|
|
332
|
-
this.subs = this.subs.filter(s => {
|
|
333
|
-
return !(s.socket && s.socket.id === socket.id);
|
|
334
|
-
});
|
|
335
|
-
this.syncs = this.syncs.filter(s => {
|
|
336
|
-
return !(s.socket_id && s.socket_id === socket.id);
|
|
337
|
-
});
|
|
338
|
-
delete this.sockets[socket.id];
|
|
339
|
-
return "ok";
|
|
340
|
-
});
|
|
341
|
-
}
|
|
342
|
-
}
|
|
343
|
-
syncTimeout;
|
|
344
|
-
async syncData(sync, clientData, source) {
|
|
345
|
-
return await (0, SyncReplication_1.syncData)(this, sync, clientData, source);
|
|
346
|
-
}
|
|
347
|
-
addSync = addSync_1.addSync.bind(this);
|
|
348
|
-
addSub = addSub_1.addSub.bind(this);
|
|
349
|
-
getActiveListeners = () => {
|
|
350
|
-
const result = [];
|
|
351
|
-
const upsert = (t, c) => {
|
|
352
|
-
if (!result.find(r => r.table_name === t && r.condition === c)) {
|
|
353
|
-
result.push({ table_name: t, condition: c });
|
|
354
|
-
}
|
|
355
|
-
};
|
|
356
|
-
(this.syncs || []).map(s => {
|
|
357
|
-
upsert(s.table_name, s.condition);
|
|
358
|
-
});
|
|
359
|
-
this.subs.forEach(s => {
|
|
360
|
-
s.triggers.forEach(trg => {
|
|
361
|
-
upsert(trg.table_name, trg.condition);
|
|
362
|
-
});
|
|
363
|
-
});
|
|
364
|
-
return result;
|
|
365
|
-
};
|
|
366
|
-
checkIfTimescaleBug = async (table_name) => {
|
|
367
|
-
const schema = "_timescaledb_catalog", res = await this.db.oneOrNone("SELECT EXISTS( \
|
|
368
|
-
SELECT * \
|
|
369
|
-
FROM information_schema.tables \
|
|
370
|
-
WHERE 1 = 1 \
|
|
371
|
-
AND table_schema = ${schema} \
|
|
372
|
-
AND table_name = 'hypertable' \
|
|
373
|
-
);", { schema });
|
|
374
|
-
if (res.exists) {
|
|
375
|
-
const isHyperTable = await this.db.any("SELECT * FROM " + (0, prostgles_types_1.asName)(schema) + ".hypertable WHERE table_name = ${table_name};", { table_name, schema });
|
|
376
|
-
if (isHyperTable && isHyperTable.length) {
|
|
377
|
-
throw "Triggers do not work on timescaledb hypertables due to bug:\nhttps://github.com/timescale/timescaledb/issues/1084";
|
|
378
|
-
}
|
|
379
|
-
}
|
|
380
|
-
return true;
|
|
381
|
-
};
|
|
382
|
-
/*
|
|
383
|
-
A table will only have a trigger with all conditions (for different subs)
|
|
384
|
-
conditions = ["user_id = 1"]
|
|
385
|
-
fields = ["user_id"]
|
|
386
|
-
*/
|
|
387
|
-
getMyTriggerQuery = async () => {
|
|
388
|
-
return pgp.as.format(`
|
|
389
|
-
SELECT * --, ROW_NUMBER() OVER(PARTITION BY table_name ORDER BY table_name, condition ) - 1 as id
|
|
390
|
-
FROM prostgles.v_triggers
|
|
391
|
-
WHERE app_id = $1
|
|
392
|
-
ORDER BY table_name, condition
|
|
393
|
-
`, [this.appID]);
|
|
394
|
-
};
|
|
395
|
-
// waitingTriggers: { [key: string]: string[] } = undefined;
|
|
396
|
-
addingTrigger;
|
|
397
|
-
addTriggerPool = undefined;
|
|
398
|
-
async addTrigger(params, viewOptions) {
|
|
399
|
-
try {
|
|
400
|
-
const { table_name } = { ...params };
|
|
401
|
-
let { condition } = { ...params };
|
|
402
|
-
if (!table_name)
|
|
403
|
-
throw "MISSING table_name";
|
|
404
|
-
if (!this.appID)
|
|
405
|
-
throw "MISSING appID";
|
|
406
|
-
if (!condition || !condition.trim().length) {
|
|
407
|
-
condition = "TRUE";
|
|
408
|
-
}
|
|
409
|
-
// console.log(1623, { app_id, addTrigger: { table_name, condition } });
|
|
410
|
-
await this.checkIfTimescaleBug(table_name);
|
|
411
|
-
const trgVals = {
|
|
412
|
-
tbl: (0, exports.asValue)(table_name),
|
|
413
|
-
cond: (0, exports.asValue)(condition),
|
|
414
|
-
};
|
|
415
|
-
await this.db.any(`
|
|
416
|
-
BEGIN WORK;
|
|
417
|
-
/* ${PubSubManager.EXCLUDE_QUERY_FROM_SCHEMA_WATCH_ID} */
|
|
418
|
-
LOCK TABLE prostgles.app_triggers IN ACCESS EXCLUSIVE MODE;
|
|
419
|
-
|
|
420
|
-
INSERT INTO prostgles.app_triggers (table_name, condition, app_id, related_view_name, related_view_def)
|
|
421
|
-
VALUES (${trgVals.tbl}, ${trgVals.cond}, ${(0, exports.asValue)(this.appID)}, ${(0, exports.asValue)(viewOptions?.viewName ?? null)}, ${(0, exports.asValue)(viewOptions?.definition ?? null)})
|
|
422
|
-
ON CONFLICT DO NOTHING;
|
|
423
|
-
|
|
424
|
-
COMMIT WORK;
|
|
425
|
-
`);
|
|
426
|
-
(0, exports.log)("addTrigger.. ", { table_name, condition });
|
|
427
|
-
const triggers = await this.db.any(await this.getMyTriggerQuery());
|
|
428
|
-
this._triggers = {};
|
|
429
|
-
triggers.map(t => {
|
|
430
|
-
this._triggers = this._triggers || {};
|
|
431
|
-
this._triggers[t.table_name] = this._triggers[t.table_name] || [];
|
|
432
|
-
if (!this._triggers[t.table_name]?.includes(t.condition)) {
|
|
433
|
-
this._triggers[t.table_name]?.push(t.condition);
|
|
434
|
-
}
|
|
435
|
-
});
|
|
436
|
-
(0, exports.log)("trigger added.. ", { table_name, condition });
|
|
437
|
-
return true;
|
|
438
|
-
// console.log("1612", JSON.stringify(triggers, null, 2))
|
|
439
|
-
// console.log("1613",JSON.stringify(this._triggers, null, 2))
|
|
440
|
-
}
|
|
441
|
-
catch (e) {
|
|
442
|
-
console.trace("Failed adding trigger", e);
|
|
443
|
-
// throw e
|
|
444
|
-
}
|
|
445
|
-
}
|
|
446
|
-
}
|
|
447
|
-
exports.PubSubManager = PubSubManager;
|
|
448
|
-
const parseCondition = (condition) => condition && condition.trim().length ? condition : "TRUE";
|
|
449
|
-
exports.parseCondition = parseCondition;
|
|
450
|
-
var prostgles_types_2 = require("prostgles-types");
|
|
451
|
-
Object.defineProperty(exports, "pickKeys", { enumerable: true, get: function () { return prostgles_types_2.pickKeys; } });
|
|
452
|
-
Object.defineProperty(exports, "omitKeys", { enumerable: true, get: function () { return prostgles_types_2.omitKeys; } });
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { SubscriptionChannels } from "prostgles-types";
|
|
2
|
-
import { PubSubManager, SubscriptionParams } from "./PubSubManager";
|
|
3
|
-
type AddSubscriptionParams = SubscriptionParams & {
|
|
4
|
-
condition: string;
|
|
5
|
-
};
|
|
6
|
-
export declare function addSub(this: PubSubManager, subscriptionParams: Omit<AddSubscriptionParams, "channel_name" | "parentSubParams">): Promise<SubscriptionChannels>;
|
|
7
|
-
export {};
|
|
8
|
-
//# sourceMappingURL=addSub.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"addSub.d.ts","sourceRoot":"","sources":["addSub.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAiC,aAAa,EAAgB,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAEjH,KAAK,qBAAqB,GAAG,kBAAkB,GAAG;IAChD,SAAS,EAAE,MAAM,CAAC;CACnB,CAAA;AAID,wBAAsB,MAAM,CAAC,IAAI,EAAE,aAAa,EAAE,kBAAkB,EAAE,IAAI,CAAC,qBAAqB,EAAE,cAAc,GAAG,iBAAiB,CAAC,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAuHpK"}
|