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

Commitdf73584

Browse files
committed
Remove zero- and one-argument range constructor functions.
Per discussion, the zero-argument forms aren't really worth the catalogspace (just write 'empty' instead). The one-argument forms have some use,but they also have a serious problem with looking too much like functionalcast notation; to the point where in many real use-cases, the parser wouldmisinterpret what was wanted.Committing this as a separate patch, with the thought that we might wantto revert part or all of it if we can think of some way around the castambiguity.
1 parentcddc819 commitdf73584

File tree

8 files changed

+24
-119
lines changed

8 files changed

+24
-119
lines changed

‎doc/src/sgml/rangetypes.sgml

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -242,20 +242,19 @@ select '[4,4]'::int4range;
242242
type. Using the constructor function is frequently more convenient than
243243
writing a range literal constant, since it avoids the need for extra
244244
quoting of the bound values. The constructor function
245-
accepts from zero to three arguments. The zero-argument form
246-
constructs an empty range; the one-argument form constructs a
247-
singleton range; the two-argument form constructs a range in
248-
standard form (lower bound inclusive, upper bound exclusive);
249-
and the three-argument form constructs a range in a form specified by the
250-
third argument. The third argument must be one of the strings
245+
accepts two or three arguments. The two-argument form constructs a range
246+
in standard form (lower bound inclusive, upper bound exclusive), while
247+
the three-argument form constructs a range with bounds of the form
248+
specified by the third argument.
249+
The third argument must be one of the strings
251250
<quote><literal>()</literal></quote>,
252251
<quote><literal>(]</literal></quote>,
253252
<quote><literal>[)</literal></quote>, or
254253
<quote><literal>[]</literal></quote>.
255254
For example:
256255

257256
<programlisting>
258-
--Three-argumentform: lower bound, upper bound, andthird argument indicating
257+
--The fullform is: lower bound, upper bound, andtext argument indicating
259258
-- inclusivity/exclusivity of bounds.
260259
SELECT numrange(1.0, 14.0, '(]');
261260

@@ -268,13 +267,6 @@ SELECT int8range(1, 14, '(]');
268267

269268
-- Using NULL for either bound causes the range to be unbounded on that side.
270269
SELECT numrange(NULL, 2.2);
271-
272-
-- Single argument constructs a singleton range; that is a range consisting of
273-
-- just one point.
274-
SELECT numrange(11.1);
275-
276-
-- Zero-argument form constructs an empty range.
277-
SELECT numrange();
278270
</programlisting>
279271
</para>
280272
</sect2>

‎src/backend/commands/typecmds.c

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1495,11 +1495,9 @@ static void
14951495
makeRangeConstructors(constchar*name,Oidnamespace,
14961496
OidrangeOid,Oidsubtype)
14971497
{
1498-
staticconstchar*constprosrc[4]= {"range_constructor0",
1499-
"range_constructor1",
1500-
"range_constructor2",
1498+
staticconstchar*constprosrc[2]= {"range_constructor2",
15011499
"range_constructor3"};
1502-
staticconstintpronargs[4]= {0,1,2,3};
1500+
staticconstintpronargs[2]= {2,3};
15031501

15041502
OidconstructorArgTypes[3];
15051503
ObjectAddressmyself,

‎src/backend/utils/adt/rangetypes.c

Lines changed: 0 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -350,42 +350,6 @@ get_range_io_data(FunctionCallInfo fcinfo, Oid rngtypid, IOFuncSelector func)
350350
*----------------------------------------------------------
351351
*/
352352

353-
/* Construct empty range value from no arguments */
354-
Datum
355-
range_constructor0(PG_FUNCTION_ARGS)
356-
{
357-
Oidrngtypid=get_fn_expr_rettype(fcinfo->flinfo);
358-
RangeType*range;
359-
TypeCacheEntry*typcache;
360-
361-
typcache=range_get_typcache(fcinfo,rngtypid);
362-
363-
range=make_empty_range(typcache);
364-
365-
PG_RETURN_RANGE(range);
366-
}
367-
368-
/* Construct singleton range value from one argument */
369-
Datum
370-
range_constructor1(PG_FUNCTION_ARGS)
371-
{
372-
Datumarg1=PG_GETARG_DATUM(0);
373-
Oidrngtypid=get_fn_expr_rettype(fcinfo->flinfo);
374-
RangeType*range;
375-
TypeCacheEntry*typcache;
376-
377-
typcache=range_get_typcache(fcinfo,rngtypid);
378-
379-
if (PG_ARGISNULL(0))
380-
ereport(ERROR,
381-
(errcode(ERRCODE_DATA_EXCEPTION),
382-
errmsg("range constructor argument must not be NULL")));
383-
384-
range=make_singleton_range(typcache,arg1);
385-
386-
PG_RETURN_RANGE(range);
387-
}
388-
389353
/* Construct standard-form range value from two arguments */
390354
Datum
391355
range_constructor2(PG_FUNCTION_ARGS)
@@ -1775,28 +1739,6 @@ make_empty_range(TypeCacheEntry *typcache)
17751739
returnmake_range(typcache,&lower,&upper, true);
17761740
}
17771741

1778-
/*
1779-
* Build a range value representing a single point.
1780-
*/
1781-
RangeType*
1782-
make_singleton_range(TypeCacheEntry*typcache,Datumval)
1783-
{
1784-
RangeBoundlower;
1785-
RangeBoundupper;
1786-
1787-
lower.val=val;
1788-
lower.infinite= false;
1789-
lower.inclusive= true;
1790-
lower.lower= true;
1791-
1792-
upper.val=val;
1793-
upper.infinite= false;
1794-
upper.inclusive= true;
1795-
upper.lower= false;
1796-
1797-
returnmake_range(typcache,&lower,&upper, false);
1798-
}
1799-
18001742

18011743
/*
18021744
*----------------------------------------------------------

‎src/include/catalog/catversion.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,6 @@
5353
*/
5454

5555
/*yyyymmddN */
56-
#defineCATALOG_VERSION_NO201111221
56+
#defineCATALOG_VERSION_NO201111222
5757

5858
#endif

‎src/include/catalog/pg_proc.h

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -4432,50 +4432,26 @@ DESCR("float8 difference of two timestamp values");
44324432
DATA(insertOID=3930 (tstzrange_subdiffPGNSPPGUID121000ffftfi20701"1184 1184"_null__null__null__null_tstzrange_subdiff_null__null__null_ ));
44334433
DESCR("float8 difference of two timestamp with time zone values");
44344434

4435-
DATA(insertOID=3838 (int4rangePGNSPPGUID121000fffffi003904""_null__null__null__null_range_constructor0_null__null__null_ ));
4436-
DESCR("int4range constructor");
4437-
DATA(insertOID=3839 (int4rangePGNSPPGUID121000fffffi103904"23"_null__null__null__null_range_constructor1_null__null__null_ ));
4438-
DESCR("int4range constructor");
44394435
DATA(insertOID=3840 (int4rangePGNSPPGUID121000fffffi203904"23 23"_null__null__null__null_range_constructor2_null__null__null_ ));
44404436
DESCR("int4range constructor");
44414437
DATA(insertOID=3841 (int4rangePGNSPPGUID121000fffffi303904"23 23 25"_null__null__null__null_range_constructor3_null__null__null_ ));
44424438
DESCR("int4range constructor");
4443-
DATA(insertOID=3842 (numrangePGNSPPGUID121000fffffi003906""_null__null__null__null_range_constructor0_null__null__null_ ));
4444-
DESCR("numrange constructor");
4445-
DATA(insertOID=3843 (numrangePGNSPPGUID121000fffffi103906"1700"_null__null__null__null_range_constructor1_null__null__null_ ));
4446-
DESCR("numrange constructor");
44474439
DATA(insertOID=3844 (numrangePGNSPPGUID121000fffffi203906"1700 1700"_null__null__null__null_range_constructor2_null__null__null_ ));
44484440
DESCR("numrange constructor");
44494441
DATA(insertOID=3845 (numrangePGNSPPGUID121000fffffi303906"1700 1700 25"_null__null__null__null_range_constructor3_null__null__null_ ));
44504442
DESCR("numrange constructor");
4451-
DATA(insertOID=3846 (tsrangePGNSPPGUID121000fffffi003908""_null__null__null__null_range_constructor0_null__null__null_ ));
4452-
DESCR("tsrange constructor");
4453-
DATA(insertOID=3847 (tsrangePGNSPPGUID121000fffffi103908"1114"_null__null__null__null_range_constructor1_null__null__null_ ));
4454-
DESCR("tsrange constructor");
44554443
DATA(insertOID=3933 (tsrangePGNSPPGUID121000fffffi203908"1114 1114"_null__null__null__null_range_constructor2_null__null__null_ ));
44564444
DESCR("tsrange constructor");
44574445
DATA(insertOID=3934 (tsrangePGNSPPGUID121000fffffi303908"1114 1114 25"_null__null__null__null_range_constructor3_null__null__null_ ));
44584446
DESCR("tsrange constructor");
4459-
DATA(insertOID=3935 (tstzrangePGNSPPGUID121000fffffi003910""_null__null__null__null_range_constructor0_null__null__null_ ));
4460-
DESCR("tstzrange constructor");
4461-
DATA(insertOID=3936 (tstzrangePGNSPPGUID121000fffffi103910"1184"_null__null__null__null_range_constructor1_null__null__null_ ));
4462-
DESCR("tstzrange constructor");
44634447
DATA(insertOID=3937 (tstzrangePGNSPPGUID121000fffffi203910"1184 1184"_null__null__null__null_range_constructor2_null__null__null_ ));
44644448
DESCR("tstzrange constructor");
44654449
DATA(insertOID=3938 (tstzrangePGNSPPGUID121000fffffi303910"1184 1184 25"_null__null__null__null_range_constructor3_null__null__null_ ));
44664450
DESCR("tstzrange constructor");
4467-
DATA(insertOID=3939 (daterangePGNSPPGUID121000fffffi003912""_null__null__null__null_range_constructor0_null__null__null_ ));
4468-
DESCR("daterange constructor");
4469-
DATA(insertOID=3940 (daterangePGNSPPGUID121000fffffi103912"1082"_null__null__null__null_range_constructor1_null__null__null_ ));
4470-
DESCR("daterange constructor");
44714451
DATA(insertOID=3941 (daterangePGNSPPGUID121000fffffi203912"1082 1082"_null__null__null__null_range_constructor2_null__null__null_ ));
44724452
DESCR("daterange constructor");
44734453
DATA(insertOID=3942 (daterangePGNSPPGUID121000fffffi303912"1082 1082 25"_null__null__null__null_range_constructor3_null__null__null_ ));
44744454
DESCR("daterange constructor");
4475-
DATA(insertOID=3943 (int8rangePGNSPPGUID121000fffffi003926""_null__null__null__null_range_constructor0_null__null__null_ ));
4476-
DESCR("int8range constructor");
4477-
DATA(insertOID=3944 (int8rangePGNSPPGUID121000fffffi103926"20"_null__null__null__null_range_constructor1_null__null__null_ ));
4478-
DESCR("int8range constructor");
44794455
DATA(insertOID=3945 (int8rangePGNSPPGUID121000fffffi203926"20 20"_null__null__null__null_range_constructor2_null__null__null_ ));
44804456
DESCR("int8range constructor");
44814457
DATA(insertOID=3946 (int8rangePGNSPPGUID121000fffffi303926"20 20 25"_null__null__null__null_range_constructor3_null__null__null_ ));

‎src/include/utils/rangetypes.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,6 @@ extern Datum range_recv(PG_FUNCTION_ARGS);
8282
externDatumrange_send(PG_FUNCTION_ARGS);
8383

8484
/* constructors */
85-
externDatumrange_constructor0(PG_FUNCTION_ARGS);
86-
externDatumrange_constructor1(PG_FUNCTION_ARGS);
8785
externDatumrange_constructor2(PG_FUNCTION_ARGS);
8886
externDatumrange_constructor3(PG_FUNCTION_ARGS);
8987

@@ -158,7 +156,6 @@ extern int range_cmp_bounds(TypeCacheEntry *typcache, RangeBound *b1,
158156
externintrange_cmp_bound_values(TypeCacheEntry*typcache,RangeBound*b1,
159157
RangeBound*b2);
160158
externRangeType*make_empty_range(TypeCacheEntry*typcache);
161-
externRangeType*make_singleton_range(TypeCacheEntry*typcache,Datumval);
162159

163160
/* GiST support (in rangetypes_gist.c) */
164161
externDatumrange_gist_consistent(PG_FUNCTION_ARGS);

‎src/test/regress/expected/rangetypes.out

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ INSERT INTO numrange_test VALUES('[3,]');
191191
INSERT INTO numrange_test VALUES('[, 5)');
192192
INSERT INTO numrange_test VALUES(numrange(1.1, 2.2));
193193
INSERT INTO numrange_test VALUES('empty');
194-
INSERT INTO numrange_test VALUES(numrange(1.7));
194+
INSERT INTO numrange_test VALUES(numrange(1.7, 1.7, '[]'));
195195
SELECT nr, isempty(nr), lower(nr), upper(nr) FROM numrange_test;
196196
nr | isempty | lower | upper
197197
-----------+---------+-------+-------
@@ -839,17 +839,17 @@ create table test_range_excl(
839839
NOTICE: CREATE TABLE / EXCLUDE will create implicit index "test_range_excl_room_during_excl" for table "test_range_excl"
840840
NOTICE: CREATE TABLE / EXCLUDE will create implicit index "test_range_excl_speaker_during_excl" for table "test_range_excl"
841841
insert into test_range_excl
842-
values(int4range(123), int4range(1), '[2010-01-02 10:00, 2010-01-02 11:00)');
842+
values(int4range(123, 123, '[]'), int4range(1, 1, '[]'), '[2010-01-02 10:00, 2010-01-02 11:00)');
843843
insert into test_range_excl
844-
values(int4range(123), int4range(2), '[2010-01-02 11:00, 2010-01-02 12:00)');
844+
values(int4range(123, 123, '[]'), int4range(2, 2, '[]'), '[2010-01-02 11:00, 2010-01-02 12:00)');
845845
insert into test_range_excl
846-
values(int4range(123), int4range(3), '[2010-01-02 10:10, 2010-01-02 11:00)');
846+
values(int4range(123, 123, '[]'), int4range(3, 3, '[]'), '[2010-01-02 10:10, 2010-01-02 11:00)');
847847
ERROR: conflicting key value violates exclusion constraint "test_range_excl_room_during_excl"
848848
DETAIL: Key (room, during)=([123,124), ["Sat Jan 02 10:10:00 2010","Sat Jan 02 11:00:00 2010")) conflicts with existing key (room, during)=([123,124), ["Sat Jan 02 10:00:00 2010","Sat Jan 02 11:00:00 2010")).
849849
insert into test_range_excl
850-
values(int4range(124), int4range(3), '[2010-01-02 10:10, 2010-01-02 11:10)');
850+
values(int4range(124, 124, '[]'), int4range(3, 3, '[]'), '[2010-01-02 10:10, 2010-01-02 11:10)');
851851
insert into test_range_excl
852-
values(int4range(125), int4range(1), '[2010-01-02 10:10, 2010-01-02 11:00)');
852+
values(int4range(125, 125, '[]'), int4range(1, 1, '[]'), '[2010-01-02 10:10, 2010-01-02 11:00)');
853853
ERROR: conflicting key value violates exclusion constraint "test_range_excl_speaker_during_excl"
854854
DETAIL: Key (speaker, during)=([1,2), ["Sat Jan 02 10:10:00 2010","Sat Jan 02 11:00:00 2010")) conflicts with existing key (speaker, during)=([1,2), ["Sat Jan 02 10:00:00 2010","Sat Jan 02 11:00:00 2010")).
855855
-- test bigint ranges
@@ -1000,10 +1000,10 @@ HINT: No function matches the given name and argument types. You might need to
10001000
--
10011001
-- Arrays of ranges
10021002
--
1003-
select ARRAY[numrange(1.1), numrange(12.3,155.5)];
1003+
select ARRAY[numrange(1.1, 1.2), numrange(12.3,155.5)];
10041004
array
10051005
------------------------------
1006-
{"[1.1,1.1]","[12.3,155.5)"}
1006+
{"[1.1,1.2)","[12.3,155.5)"}
10071007
(1 row)
10081008

10091009
create table i8r_array (f1 int, f2 int8range[]);

‎src/test/regress/sql/rangetypes.sql

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ INSERT INTO numrange_test VALUES('[3,]');
5454
INSERT INTO numrange_testVALUES('[, 5)');
5555
INSERT INTO numrange_testVALUES(numrange(1.1,2.2));
5656
INSERT INTO numrange_testVALUES('empty');
57-
INSERT INTO numrange_testVALUES(numrange(1.7));
57+
INSERT INTO numrange_testVALUES(numrange(1.7,1.7,'[]'));
5858

5959
SELECT nr, isempty(nr),lower(nr),upper(nr)FROM numrange_test;
6060
SELECT nr, lower_inc(nr), lower_inf(nr), upper_inc(nr), upper_inf(nr)FROM numrange_test;
@@ -239,15 +239,15 @@ create table test_range_excl(
239239
);
240240

241241
insert into test_range_excl
242-
values(int4range(123), int4range(1),'[2010-01-02 10:00, 2010-01-02 11:00)');
242+
values(int4range(123,123,'[]'), int4range(1,1,'[]'),'[2010-01-02 10:00, 2010-01-02 11:00)');
243243
insert into test_range_excl
244-
values(int4range(123), int4range(2),'[2010-01-02 11:00, 2010-01-02 12:00)');
244+
values(int4range(123,123,'[]'), int4range(2,2,'[]'),'[2010-01-02 11:00, 2010-01-02 12:00)');
245245
insert into test_range_excl
246-
values(int4range(123), int4range(3),'[2010-01-02 10:10, 2010-01-02 11:00)');
246+
values(int4range(123,123,'[]'), int4range(3,3,'[]'),'[2010-01-02 10:10, 2010-01-02 11:00)');
247247
insert into test_range_excl
248-
values(int4range(124), int4range(3),'[2010-01-02 10:10, 2010-01-02 11:10)');
248+
values(int4range(124,124,'[]'), int4range(3,3,'[]'),'[2010-01-02 10:10, 2010-01-02 11:10)');
249249
insert into test_range_excl
250-
values(int4range(125), int4range(1),'[2010-01-02 10:10, 2010-01-02 11:00)');
250+
values(int4range(125,125,'[]'), int4range(1,1,'[]'),'[2010-01-02 10:10, 2010-01-02 11:00)');
251251

252252
-- test bigint ranges
253253
select int8range(10000000000::int8,20000000000::int8,'(]');
@@ -344,7 +344,7 @@ select rangetypes_sql(numrange(1,10), ARRAY[2,20]); -- match failure
344344
-- Arrays of ranges
345345
--
346346

347-
select ARRAY[numrange(1.1), numrange(12.3,155.5)];
347+
select ARRAY[numrange(1.1,1.2), numrange(12.3,155.5)];
348348

349349
createtablei8r_array (f1int, f2 int8range[]);
350350
insert into i8r_arrayvalues (42, array[int8range(1,10), int8range(2,20)]);

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp