@@ -4042,8 +4042,8 @@ vops_substitute_tables_with_projections(char const* queryString, Query *query)
4042
4042
TupleDesc tupDesc = SPI_tuptable -> tupdesc ;
4043
4043
bool isnull ;
4044
4044
char * projectionName = SPI_getvalue (tuple , tupDesc , 1 );
4045
- ArrayType * vectorColumns ;
4046
- ArrayType * scalarColumns ;
4045
+ ArrayType * vectorColumns = NULL ;
4046
+ ArrayType * scalarColumns = NULL ;
4047
4047
char * keyName = SPI_getvalue (tuple , tupDesc , 5 );
4048
4048
Datum * vectorAttnos ;
4049
4049
Datum * scalarAttnos ;
@@ -4056,24 +4056,30 @@ vops_substitute_tables_with_projections(char const* queryString, Query *query)
4056
4056
4057
4057
4058
4058
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 )
4067
4060
{
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
+ }
4069
4069
}
4070
4070
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 )
4074
4073
{
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
+ }
4077
4083
allAttrs = bms_union (vectorAttrs , vectorAttrs );
4078
4084
4079
4085
hasAggregates |= refs -> agg != NULL ;
0 commit comments