@@ -4042,8 +4042,8 @@ 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 ;
4046- ArrayType * scalarColumns ;
4045+ ArrayType * vectorColumns = NULL ;
4046+ ArrayType * scalarColumns = NULL ;
40474047 char * keyName = SPI_getvalue (tuple , tupDesc , 5 );
40484048 Datum * vectorAttnos ;
40494049 Datum * scalarAttnos ;
@@ -4056,24 +4056,30 @@ vops_substitute_tables_with_projections(char const* queryString, Query *query)
40564056
40574057
40584058 datum = SPI_getbinval (tuple , tupDesc , 3 , & isnull );
4059- vectorColumns = isnull ? NULL : (ArrayType * )DatumGetPointer (PG_DETOAST_DATUM (datum ));
4060-
4061- datum = SPI_getbinval (tuple , tupDesc , 4 , & isnull );
4062- scalarColumns = isnull ? NULL : (ArrayType * )DatumGetPointer (PG_DETOAST_DATUM (datum ));
4063-
4064- /* Construct set of used vector columns */
4065- deconstruct_array (vectorColumns , INT4OID , 4 , true, 'i' , & vectorAttnos , NULL , & nVectorColumns );
4066- for (j = 0 ; j < nVectorColumns ; j ++ )
4059+ if (!isnull )
40674060 {
4068- 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+ }
40694069 }
40704070
4071- /* Construct set of used scalar columns */
4072- deconstruct_array (scalarColumns , INT4OID , 4 , true, 'i' , & scalarAttnos , NULL , & nScalarColumns );
4073- for (j = 0 ; j < nScalarColumns ; j ++ )
4071+ datum = SPI_getbinval (tuple , tupDesc , 4 , & isnull );
4072+ if (!isnull )
40744073 {
4075- scalarAttrs = bms_add_member (scalarAttrs , DatumGetInt32 (scalarAttnos [j ]));
4076- }
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+ }
40774083 allAttrs = bms_union (vectorAttrs , vectorAttrs );
40784084
40794085 hasAggregates |= refs -> agg != NULL ;
0 commit comments