@@ -4042,18 +4042,26 @@ 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 ;
4046+ ArrayType * scalarColumns ;
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+
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 */
40574065 deconstruct_array (vectorColumns , INT4OID , 4 , true, 'i' , & vectorAttnos , NULL , & nVectorColumns );
40584066 for (j = 0 ; j < nVectorColumns ; j ++ )
40594067 {
0 commit comments