Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 7ffe6fd

Browse files
committed
Merge branch 'master' of https://github.com/postgrespro/vops
2 parents df164b1 + d7d83a4 commit 7ffe6fd

File tree

3 files changed

+27
-11
lines changed

3 files changed

+27
-11
lines changed

expected/test.out

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -301,6 +301,7 @@ select sum(x) over (order by id rows between 9 preceding and current row) from s
301301
955
302302
(100 rows)
303303

304+
set vops.auto_substitute_projections=on;
304305
create table it(i interval, t varchar(4));
305306
insert into it values ('1 second','sec'), ('1 minute','min'), ('1 hour','hour');
306307
select create_projection('vit','it',array['i','t']);

sql/test.sql

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ select populate(destination:='v2'::regclass, source:='s2'::regclass,sort:='id');
2323
select unnest(t.*) from (select msum(x,10) over (order by first(id)) from v2) t;
2424
select sum(x) over (order by id rows between 9 preceding and current row) from s2;
2525

26+
set vops.auto_substitute_projections=on;
2627
create table it(i interval, t varchar(4));
2728
insert into it values ('1 second','sec'), ('1 minute','min'), ('1 hour','hour');
2829
select create_projection('vit','it',array['i','t']);

vops.c

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4042,30 +4042,44 @@ vops_substitute_tables_with_projections(char const* queryString, Query *query)
40424042
TupleDesc tupDesc = SPI_tuptable->tupdesc;
40434043
bool isnull;
40444044
char* projectionName = SPI_getvalue(tuple, tupDesc, 1);
4045-
ArrayType* vectorColumns = (ArrayType*)DatumGetPointer(PG_DETOAST_DATUM(SPI_getbinval(tuple, tupDesc, 3, &isnull)));
4046-
ArrayType* scalarColumns = (ArrayType*)DatumGetPointer(PG_DETOAST_DATUM(SPI_getbinval(tuple, tupDesc, 4, &isnull)));
4045+
ArrayType* vectorColumns = NULL;
4046+
ArrayType* scalarColumns = NULL;
40474047
char* keyName = SPI_getvalue(tuple, tupDesc, 5);
40484048
Datum* vectorAttnos;
40494049
Datum* scalarAttnos;
4050+
Datum datum;
40504051
int nScalarColumns;
40514052
int nVectorColumns;
40524053
Bitmapset* vectorAttrs = NULL;
40534054
Bitmapset* scalarAttrs = NULL;
40544055
Bitmapset* allAttrs;
40554056

4056-
/* Construct set of used vector columns */
4057-
deconstruct_array(vectorColumns, INT4OID, 4, true, 'i', &vectorAttnos, NULL, &nVectorColumns);
4058-
for (j = 0; j < nVectorColumns; j++)
4057+
4058+
datum = SPI_getbinval(tuple, tupDesc, 3, &isnull);
4059+
if (!isnull)
40594060
{
4060-
vectorAttrs = bms_add_member(vectorAttrs, DatumGetInt32(vectorAttnos[j]));
4061+
vectorColumns = (ArrayType*)DatumGetPointer(PG_DETOAST_DATUM(datum));
4062+
4063+
/* Construct set of used vector columns */
4064+
deconstruct_array(vectorColumns, INT4OID, 4, true, 'i', &vectorAttnos, NULL, &nVectorColumns);
4065+
for (j = 0; j < nVectorColumns; j++)
4066+
{
4067+
vectorAttrs = bms_add_member(vectorAttrs, DatumGetInt32(vectorAttnos[j]));
4068+
}
40614069
}
40624070

4063-
/* Construct set of used scalar columns */
4064-
deconstruct_array(scalarColumns, INT4OID, 4, true, 'i', &scalarAttnos, NULL, &nScalarColumns);
4065-
for (j = 0; j < nScalarColumns; j++)
4071+
datum = SPI_getbinval(tuple, tupDesc, 4, &isnull);
4072+
if (!isnull)
40664073
{
4067-
scalarAttrs = bms_add_member(scalarAttrs, DatumGetInt32(scalarAttnos[j]));
4068-
}
4074+
scalarColumns = isnull ? NULL : (ArrayType*)DatumGetPointer(PG_DETOAST_DATUM(datum));
4075+
4076+
/* Construct set of used scalar columns */
4077+
deconstruct_array(scalarColumns, INT4OID, 4, true, 'i', &scalarAttnos, NULL, &nScalarColumns);
4078+
for (j = 0; j < nScalarColumns; j++)
4079+
{
4080+
scalarAttrs = bms_add_member(scalarAttrs, DatumGetInt32(scalarAttnos[j]));
4081+
}
4082+
}
40694083
allAttrs = bms_union(vectorAttrs, vectorAttrs);
40704084

40714085
hasAggregates |= refs->agg != NULL;

0 commit comments

Comments
 (0)