@@ -1288,24 +1288,33 @@ add_variable_edge_to_query(cypher_parsestate *cpstate, Query *query, cypher_rela
12881288 edge -> name = get_next_default_alias (cpstate );
12891289
12901290 bool is_default_label = true;
1291- if (edge -> label )
1292- ereport (ERROR ,
1293- (errcode (ERRCODE_FEATURE_NOT_SUPPORTED ),
1294- errmsg ("MATCH labels are not supported" )));
1295- else
1291+ Node * label_filter = NULL ;
1292+ if (edge -> label ) {
1293+ is_default_label = false;
1294+ label_cache_data * lcd = search_label_name_graph_cache (edge -> label , cpstate -> graph_oid );
1295+ if (!lcd )
1296+ ereport (ERROR ,
1297+ (errcode (ERRCODE_UNDEFINED_OBJECT ),
1298+ errmsg ("Edge label \"%s\" does not exist" , edge -> label )));
1299+
1300+ label_filter = make_int_const (lcd -> id , -1 );
1301+ }else {
12961302 edge -> label = AG_DEFAULT_LABEL_EDGE ;
1303+ }
12971304
12981305 A_Indices * varlen = (A_Indices * )edge -> varlen ;
12991306
13001307 return add_srf_to_query (
13011308 cpstate ,
13021309 makeFuncCall (
13031310 list_make2 (makeString ("postgraph" ), makeString ("variable_edge_search" )),
1304- list_make4 (
1311+ list_make5 (
13051312 make_int_const (cpstate -> graph_oid , -1 ),
13061313 scanNSItemForColumn (cpstate , vertex_pnsi , 0 , AG_VERTEX_COLNAME_ID , -1 ),
13071314 varlen -> lidx ? varlen -> lidx : make_null_const (-1 ),
1308- varlen -> uidx ? varlen -> uidx : make_null_const (-1 )),
1315+ varlen -> uidx ? varlen -> uidx : make_null_const (-1 ),
1316+ !is_default_label ? (Node * )label_filter : make_null_const (-1 )
1317+ ),
13091318 COERCE_EXPLICIT_CALL , -1 ),
13101319 edge -> name ,
13111320 list_make3 (makeString ("edges" ), makeString ("endid" ), makeString ("hashset" )));
0 commit comments