Skip to content

Commit 88c0400

Browse files
committed
v2.22.1: Add support for custom microshard schema naming; fix replication lag waiting during microshards move; improve tests;
1 parent 8310b8a commit 88c0400

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+864
-343
lines changed

docs/functions/cli.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
> **cli**(): `void`
1010
11-
Defined in: [src/cli.ts:212](https://github.com/clickup/pg-microsharding/blob/master/src/cli.ts#L212)
11+
Defined in: [src/cli.ts:230](https://github.com/clickup/pg-microsharding/blob/master/src/cli.ts#L230)
1212

1313
A wrapper around main() to call it from a bin script.
1414

docs/functions/install.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,9 @@ Installs/updates microsharding schema and functions.
1616

1717
| Parameter | Type |
1818
| ------ | ------ |
19-
| `__namedParameters` | \{ `dsn`: `string`; \} |
19+
| `__namedParameters` | \{ `dsn`: `string`; `schemaNameFmt`: `string`; \} |
2020
| `__namedParameters.dsn` | `string` |
21+
| `__namedParameters.schemaNameFmt`? | `string` |
2122

2223
## Returns
2324

docs/functions/main.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
> **main**(`argsIn`): `Promise`\<`boolean`\>
1010
11-
Defined in: [src/cli.ts:145](https://github.com/clickup/pg-microsharding/blob/master/src/cli.ts#L145)
11+
Defined in: [src/cli.ts:158](https://github.com/clickup/pg-microsharding/blob/master/src/cli.ts#L158)
1212

1313
Tool main function.
1414

docs/functions/move.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
> **move**(`__namedParameters`): `Promise`\<`void`\>
1010
11-
Defined in: [src/api/move.ts:29](https://github.com/clickup/pg-microsharding/blob/master/src/api/move.ts#L29)
11+
Defined in: [src/api/move.ts:32](https://github.com/clickup/pg-microsharding/blob/master/src/api/move.ts#L32)
1212

1313
Moves a shard from one master DB to another.
1414

package-lock.json

Lines changed: 179 additions & 132 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "@clickup/pg-microsharding",
33
"description": "Microshards support for PostgreSQL",
4-
"version": "2.20.2",
4+
"version": "2.22.1",
55
"license": "MIT",
66
"keywords": [
77
"postgresql",
@@ -18,6 +18,7 @@
1818
"dev": "internal/dev.sh",
1919
"lint": "internal/lint.sh",
2020
"test": "PGPORT=54833 internal/with-docker-compose-up.postgres.sh 'f() { internal/test.sh \"$@\" && if [ \"$1\" == \"\" ]; then for f in sql/__tests__/test_*.sql; do echo == $f; echo; psql -f $f; echo; echo; done; fi; }; f'",
21+
"test:db": "PGPORT=54833 internal/with-docker-compose-up.postgres.sh 'for f in sql/__tests__/test_*.sql; do echo == $f; echo; psql -f $f; echo; echo; done'",
2122
"psql": "PGPORT=54833 internal/with-docker-compose-up.postgres.sh psql",
2223
"docs": "internal/update-readme.js && internal/docs.sh",
2324
"clean": "internal/clean.sh",

sql/__tests__/begin.sql

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -24,19 +24,9 @@ SET search_path TO test_microsharding;
2424
SET client_min_messages TO NOTICE;
2525
\set ON_ERROR_STOP on
2626

27+
\setenv PG_MICROSHARDING_SCHEMA_NAME_FMT 'test_microsharding%04d'
2728
\ir ../pg-microsharding-up.sql
2829

29-
30-
CREATE OR REPLACE FUNCTION microsharding_schema_name_(
31-
shard integer
32-
) RETURNS text
33-
LANGUAGE sql
34-
SET search_path FROM CURRENT
35-
AS $$
36-
SELECT 'test_microsharding' || lpad($1::text, 4, '0')
37-
$$;
38-
39-
4030
CREATE FUNCTION expect(sql text, exp text, msg text) RETURNS void LANGUAGE plpgsql AS $$
4131
DECLARE
4232
got text;
@@ -47,3 +37,20 @@ BEGIN
4737
END IF;
4838
END;
4939
$$;
40+
41+
CREATE FUNCTION expect_raise(sql text, exp text, msg text) RETURNS void LANGUAGE plpgsql AS $$
42+
DECLARE
43+
got text;
44+
BEGIN
45+
BEGIN
46+
EXECUTE sql INTO got;
47+
RAISE EXCEPTION 'Expected to raise an exception (%)', msg;
48+
EXCEPTION
49+
WHEN OTHERS THEN
50+
GET STACKED DIAGNOSTICS got = MESSAGE_TEXT;
51+
IF got NOT LIKE exp THEN
52+
RAISE EXCEPTION 'Expected exception matching "%", got "%"', exp, got;
53+
END IF;
54+
END;
55+
END;
56+
$$;

sql/__tests__/rollback.sql

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ SELECT array_agg(s) FROM microsharding_debug_fdw_drop('test_microsharding_fdw')
66
\ir ../pg-microsharding-down.sql
77

88
DROP FUNCTION expect(text, text, text);
9+
DROP FUNCTION expect_raise(text, text, text);
910

1011
SET search_path TO public;
1112
DROP SCHEMA test_microsharding;

sql/__tests__/test_fmt.sql

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
\ir ./begin.sql
2+
3+
SELECT expect(
4+
$$ SELECT microsharding_fmt_('sh%04d', 1) $$,
5+
'sh0001',
6+
'zero-padding'
7+
) \gset
8+
9+
SELECT expect(
10+
$$ SELECT microsharding_fmt_('my_%d', 1) $$,
11+
'my_1',
12+
'non zero-padding'
13+
) \gset
14+
15+
SELECT expect(
16+
$$ SELECT microsharding_fmt_('my_%05d_sfx', 1) $$,
17+
'my_00001_sfx',
18+
'with suffix'
19+
) \gset
20+
21+
SELECT expect_raise(
22+
$$ SELECT microsharding_fmt_('sh%s', 1) $$,
23+
'Invalid format specifier%',
24+
'error'
25+
) \gset
26+
27+
SELECT expect_raise(
28+
$$ SELECT microsharding_fmt_('sh%2d', 1) $$,
29+
'Invalid format specifier%',
30+
'error'
31+
) \gset
32+
33+
\ir ./rollback.sql
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
CREATE OR REPLACE FUNCTION microsharding_fmt_(
2+
fmt text,
3+
arg integer
4+
) RETURNS text
5+
LANGUAGE plpgsql
6+
SET search_path FROM CURRENT
7+
AS $$
8+
DECLARE
9+
m text[];
10+
prefix text;
11+
width text;
12+
suffix text;
13+
BEGIN
14+
m := regexp_match(fmt, '^([^%]*)%(0[0-9]+)?d([^%]*)$');
15+
IF m IS NULL THEN
16+
RAISE EXCEPTION 'Invalid format specifier: "%" (valid examples: "sh%%04d", "some_%%d", "some%%04d_my")', fmt;
17+
END IF;
18+
prefix := m[1];
19+
width := m[2];
20+
suffix := m[3];
21+
IF COALESCE(width, '') = '' THEN
22+
RETURN prefix || arg || suffix;
23+
ELSE
24+
RETURN prefix || lpad(arg::text, width::integer, '0') || suffix;
25+
END IF;
26+
END;
27+
$$;
28+
29+
COMMENT ON FUNCTION microsharding_fmt_(text, integer)
30+
IS 'A poor man''s sprintf() implementation limited to only one integer substitution.';

0 commit comments

Comments
 (0)