Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit6ae4959

Browse files
committed
rename get_attribute_type_name() -> get_attribute_type(), introduce function get_base_type(), improve VAR handling in read_opexpr_const(), fix partitioning of domains
1 parent9476927 commit6ae4959

File tree

9 files changed

+164
-82
lines changed

9 files changed

+164
-82
lines changed

‎hash.sql

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,10 @@ RETURNS INTEGER AS
2020
$$
2121
DECLARE
2222
v_child_relnameTEXT;
23-
v_typeTEXT;
2423
v_plain_schemaTEXT;
2524
v_plain_relnameTEXT;
26-
v_hashfuncTEXT;
25+
v_atttypeREGTYPE;
26+
v_hashfuncREGPROC;
2727

2828
BEGIN
2929
IF partition_data= true THEN
@@ -38,13 +38,13 @@ BEGIN
3838
attribute :=lower(attribute);
3939
PERFORM @extschema@.common_relation_checks(parent_relid, attribute);
4040

41-
v_type := @extschema@.get_attribute_type_name(parent_relid, attribute);
41+
/* Fetch atttype and its hash function*/
42+
v_atttype := @extschema@.get_attribute_type(parent_relid, attribute);
43+
v_hashfunc := @extschema@.get_type_hash_func(v_atttype);
4244

4345
SELECT* INTO v_plain_schema, v_plain_relname
4446
FROM @extschema@.get_plain_schema_and_relname(parent_relid);
4547

46-
v_hashfunc := @extschema@.get_type_hash_func(v_type::regtype)::regproc;
47-
4848
/* Insert new entry to pathman config*/
4949
INSERT INTO @extschema@.pathman_config (partrel, attname, parttype)
5050
VALUES (parent_relid, attribute,1);
@@ -65,7 +65,7 @@ BEGIN
6565
v_child_relname,
6666
@extschema@.build_check_constraint_name(v_child_relname::REGCLASS,
6767
attribute),
68-
v_hashfunc,
68+
v_hashfunc::TEXT,
6969
attribute,
7070
partitions_count,
7171
partnum);
@@ -137,7 +137,7 @@ DECLARE
137137
child_relname_formatTEXT;
138138
funcnameTEXT;
139139
triggernameTEXT;
140-
atttypeTEXT;
140+
atttypeREGTYPE;
141141
hashfuncTEXT;
142142
partitions_countINTEGER;
143143

@@ -180,13 +180,12 @@ BEGIN
180180
quote_ident(plain_relname||'_%s');
181181

182182
/* Fetch base hash function for atttype*/
183-
atttype := @extschema@.get_attribute_type_name(parent_relid, attr);
184-
hashfunc := @extschema@.get_type_hash_func(atttype::regtype)::regproc;
183+
atttype := @extschema@.get_attribute_type(parent_relid, attr);
185184

186185
/* Format function definition and execute it*/
187-
func := format(func, funcname, attr, partitions_count, att_val_fmt,
188-
old_fields, att_fmt, new_fields, child_relname_format, hashfunc);
189-
EXECUTE func;
186+
EXECUTE format(func, funcname, attr, partitions_count, att_val_fmt,
187+
old_fields, att_fmt, new_fields, child_relname_format,
188+
@extschema@.get_type_hash_func(atttype)::TEXT);
190189

191190
/* Create trigger on every partition*/
192191
FOR numIN0..partitions_count-1
@@ -205,7 +204,7 @@ $$ LANGUAGE plpgsql;
205204
* Returns hash function OID for specified type
206205
*/
207206
CREATEOR REPLACE FUNCTION @extschema@.get_type_hash_func(REGTYPE)
208-
RETURNSOIDAS'pg_pathman','get_type_hash_func'
207+
RETURNSREGPROCAS'pg_pathman','get_type_hash_func'
209208
LANGUAGE C STRICT;
210209

211210
/*

‎init.sql

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -614,6 +614,14 @@ CREATE OR REPLACE FUNCTION @extschema@.get_parent_of_partition(REGCLASS)
614614
RETURNS REGCLASSAS'pg_pathman','get_parent_of_partition_pl'
615615
LANGUAGE C STRICT;
616616

617+
/*
618+
* Extract basic type of a domain.
619+
*/
620+
CREATEOR REPLACE FUNCTION @extschema@.get_base_type(REGTYPE)
621+
RETURNS REGTYPEAS'pg_pathman','get_base_type_pl'
622+
LANGUAGE C STRICT;
623+
624+
617625
/*
618626
* Checks if attribute is nullable
619627
*/
@@ -633,9 +641,9 @@ LANGUAGE C STRICT;
633641
/*
634642
* Returns attribute type name for relation
635643
*/
636-
CREATEOR REPLACE FUNCTION @extschema@.get_attribute_type_name(
644+
CREATEOR REPLACE FUNCTION @extschema@.get_attribute_type(
637645
REGCLASS,TEXT)
638-
RETURNSTEXTAS'pg_pathman','get_attribute_type_name'
646+
RETURNSREGTYPEAS'pg_pathman','get_attribute_type_pl'
639647
LANGUAGE C STRICT;
640648

641649
/*

‎range.sql

Lines changed: 24 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ BEGIN
138138
p_attribute,
139139
p_start_value,
140140
p_start_value+ p_interval* p_count,
141-
pg_typeof(p_start_value));
141+
@extschema@.get_base_type(pg_typeof(p_start_value))::TEXT);
142142
END IF;
143143

144144
/* Create sequence for child partitions names*/
@@ -153,7 +153,7 @@ BEGIN
153153
FOR iIN1..p_count
154154
LOOP
155155
EXECUTE format('SELECT @extschema@.create_single_range_partition($1, $2, $3::%s)',
156-
pg_typeof(p_start_value))
156+
@extschema@.get_base_type(pg_typeof(p_start_value))::TEXT)
157157
USING parent_relid, p_start_value, p_start_value+ p_interval;
158158

159159
p_start_value := p_start_value+ p_interval;
@@ -283,7 +283,7 @@ CREATE OR REPLACE FUNCTION @extschema@.create_partitions_from_range(
283283
p_start_valueANYELEMENT,
284284
p_end_valueANYELEMENT,
285285
p_intervalANYELEMENT,
286-
partition_dataBOOLEAN DEFAULT true)
286+
partition_dataBOOLEAN DEFAULT true)
287287
RETURNSINTEGERAS
288288
$$
289289
DECLARE
@@ -353,7 +353,7 @@ CREATE OR REPLACE FUNCTION @extschema@.create_partitions_from_range(
353353
p_start_valueANYELEMENT,
354354
p_end_valueANYELEMENT,
355355
p_intervalINTERVAL,
356-
partition_dataBOOLEAN DEFAULT true)
356+
partition_dataBOOLEAN DEFAULT true)
357357
RETURNSINTEGERAS
358358
$$
359359
DECLARE
@@ -389,7 +389,7 @@ BEGIN
389389
WHILE p_start_value<= p_end_value
390390
LOOP
391391
EXECUTE format('SELECT @extschema@.create_single_range_partition($1, $2, $3::%s);',
392-
pg_typeof(p_start_value))
392+
@extschema@.get_base_type(pg_typeof(p_start_value))::TEXT)
393393
USING parent_relid, p_start_value, p_start_value+ p_interval;
394394

395395
p_start_value := p_start_value+ p_interval;
@@ -588,7 +588,7 @@ DECLARE
588588
v_parent_relid2REGCLASS;
589589
v_attnameTEXT;
590590
v_part_typeINTEGER;
591-
v_atttypeTEXT;
591+
v_atttypeREGTYPE;
592592

593593
BEGIN
594594
IF partition1= partition2 THEN
@@ -623,10 +623,10 @@ BEGIN
623623
RAISE EXCEPTION'Specified partitions aren''t RANGE partitions';
624624
END IF;
625625

626-
v_atttype := @extschema@.get_attribute_type_name(partition1, v_attname);
626+
v_atttype := @extschema@.get_attribute_type(partition1, v_attname);
627627

628628
EXECUTE format('SELECT @extschema@.merge_range_partitions_internal($1, $2, $3, NULL::%s)',
629-
v_atttype)
629+
@extschema@.get_base_type(v_atttype)::TEXT)
630630
USING v_parent_relid1, partition1, partition2;
631631

632632
/* Tell backend to reload configuration*/
@@ -713,7 +713,7 @@ RETURNS TEXT AS
713713
$$
714714
DECLARE
715715
v_attnameTEXT;
716-
v_atttypeTEXT;
716+
v_atttypeREGTYPE;
717717
v_part_nameTEXT;
718718
v_intervalTEXT;
719719

@@ -730,12 +730,11 @@ BEGIN
730730
RAISE EXCEPTION'Table "%" is not partitioned', parent_relid::TEXT;
731731
END IF;
732732

733-
v_atttype := @extschema@.get_attribute_type_name(parent_relid, v_attname);
733+
v_atttype := @extschema@.get_attribute_type(parent_relid, v_attname);
734734

735735
EXECUTE
736-
format(
737-
'SELECT @extschema@.append_partition_internal($1, $2, $3, ARRAY[]::%s[], $4)',
738-
v_atttype)
736+
format('SELECT @extschema@.append_partition_internal($1, $2, $3, ARRAY[]::%s[], $4)',
737+
@extschema@.get_base_type(v_atttype)::TEXT)
739738
USING
740739
parent_relid,
741740
v_atttype,
@@ -759,7 +758,7 @@ LANGUAGE plpgsql;
759758
*/
760759
CREATEOR REPLACE FUNCTION @extschema@.append_partition_internal(
761760
parent_relidREGCLASS,
762-
p_atttypeTEXT,
761+
p_atttypeREGTYPE,
763762
p_intervalTEXT,
764763
p_rangeANYARRAY DEFAULTNULL,
765764
partition_nameTEXT DEFAULTNULL)
@@ -775,17 +774,16 @@ BEGIN
775774

776775
p_range := @extschema@.get_range_by_idx(parent_relid,-1,0);
777776

778-
IF @extschema@.is_date_type(p_atttype::regtype) THEN
777+
IF @extschema@.is_date_type(p_atttype) THEN
779778
v_part_name := @extschema@.create_single_range_partition(
780779
parent_relid,
781780
p_range[2],
782781
p_range[2]+ p_interval::interval,
783782
partition_name);
784783
ELSE
785784
EXECUTE
786-
format(
787-
'SELECT @extschema@.create_single_range_partition($1, $2, $2 + $3::%s, $4)',
788-
p_atttype)
785+
format('SELECT @extschema@.create_single_range_partition($1, $2, $2 + $3::%s, $4)',
786+
@extschema@.get_base_type(p_atttype)::TEXT)
789787
USING
790788
parent_relid,
791789
p_range[2],
@@ -811,7 +809,7 @@ RETURNS TEXT AS
811809
$$
812810
DECLARE
813811
v_attnameTEXT;
814-
v_atttypeTEXT;
812+
v_atttypeREGTYPE;
815813
v_part_nameTEXT;
816814
v_intervalTEXT;
817815

@@ -825,12 +823,11 @@ BEGIN
825823
RAISE EXCEPTION'Table "%" is not partitioned', parent_relid::TEXT;
826824
END IF;
827825

828-
v_atttype := @extschema@.get_attribute_type_name(parent_relid, v_attname);
826+
v_atttype := @extschema@.get_attribute_type(parent_relid, v_attname);
829827

830828
EXECUTE
831-
format(
832-
'SELECT @extschema@.prepend_partition_internal($1, $2, $3, ARRAY[]::%s[], $4)',
833-
v_atttype)
829+
format('SELECT @extschema@.prepend_partition_internal($1, $2, $3, ARRAY[]::%s[], $4)',
830+
@extschema@.get_base_type(v_atttype)::TEXT)
834831
USING
835832
parent_relid,
836833
v_atttype,
@@ -854,7 +851,7 @@ LANGUAGE plpgsql;
854851
*/
855852
CREATEOR REPLACE FUNCTION @extschema@.prepend_partition_internal(
856853
parent_relidREGCLASS,
857-
p_atttypeTEXT,
854+
p_atttypeREGTYPE,
858855
p_intervalTEXT,
859856
p_rangeANYARRAY DEFAULTNULL,
860857
partition_nameTEXT DEFAULTNULL)
@@ -870,17 +867,16 @@ BEGIN
870867

871868
p_range := @extschema@.get_range_by_idx(parent_relid,0,0);
872869

873-
IF @extschema@.is_date_type(p_atttype::regtype) THEN
870+
IF @extschema@.is_date_type(p_atttype) THEN
874871
v_part_name := @extschema@.create_single_range_partition(
875872
parent_relid,
876873
p_range[1]- p_interval::interval,
877874
p_range[1],
878875
partition_name);
879876
ELSE
880877
EXECUTE
881-
format(
882-
'SELECT @extschema@.create_single_range_partition($1, $2 - $3::%s, $2, $4)',
883-
p_atttype)
878+
format('SELECT @extschema@.create_single_range_partition($1, $2 - $3::%s, $2, $4)',
879+
@extschema@.get_base_type(p_atttype)::TEXT)
884880
USING
885881
parent_relid,
886882
p_range[1],

‎src/hooks.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -550,7 +550,6 @@ pathman_relcache_hook(Datum arg, Oid relid)
550550
/* Both syscache and pathman's cache say it isn't a partition */
551551
casePPS_ENTRY_NOT_FOUND:
552552
{
553-
/* NOTE: Remove NOT_USED when it's time */
554553
delay_invalidation_parent_rel(partitioned_table);
555554
#ifdefNOT_USED
556555
elog(DEBUG2,"Invalidation message for relation %u [%u]",

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp