@@ -66,7 +66,7 @@ gen_db_file_maps(DbInfo *old_db, DbInfo *new_db,
66
66
if (strcmp (newrel -> nspname ,"pg_toast" )== 0 )
67
67
continue ;
68
68
69
- oldrel = relarr_lookup_rel (& ( old_db -> rel_arr ) ,newrel -> nspname ,
69
+ oldrel = relarr_lookup_rel (& old_db -> rel_arr ,newrel -> nspname ,
70
70
newrel -> relname ,CLUSTER_OLD );
71
71
72
72
map_rel (oldrel ,newrel ,old_db ,new_db ,old_pgdata ,new_pgdata ,
@@ -275,7 +275,7 @@ get_db_and_rel_infos(DbInfoArr *db_arr, Cluster whichCluster)
275
275
276
276
for (dbnum = 0 ;dbnum < db_arr -> ndbs ;dbnum ++ )
277
277
get_rel_infos (& db_arr -> dbs [dbnum ],
278
- & ( db_arr -> dbs [dbnum ].rel_arr ) ,whichCluster );
278
+ & db_arr -> dbs [dbnum ].rel_arr ,whichCluster );
279
279
280
280
if (log .debug )
281
281
dbarr_print (db_arr ,whichCluster );
@@ -292,8 +292,7 @@ get_db_and_rel_infos(DbInfoArr *db_arr, Cluster whichCluster)
292
292
* FirstNormalObjectId belongs to the user
293
293
*/
294
294
static void
295
- get_rel_infos (const DbInfo * dbinfo ,
296
- RelInfoArr * relarr ,Cluster whichCluster )
295
+ get_rel_infos (const DbInfo * dbinfo ,RelInfoArr * relarr ,Cluster whichCluster )
297
296
{
298
297
PGconn * conn = connectToServer (dbinfo -> db_name ,whichCluster );
299
298
PGresult * res ;
@@ -386,6 +385,7 @@ get_rel_infos(const DbInfo *dbinfo,
386
385
387
386
relarr -> rels = relinfos ;
388
387
relarr -> nrels = num_rels ;
388
+ relarr -> cache_name_rel = 0 ;
389
389
}
390
390
391
391
@@ -419,31 +419,31 @@ dbarr_lookup_db(DbInfoArr *db_arr, const char *db_name)
419
419
* RelInfo structure.
420
420
*/
421
421
static RelInfo *
422
- relarr_lookup_rel (RelInfoArr * rel_arr ,
423
- const char * nspname ,const char * relname ,
424
- Cluster whichCluster )
422
+ relarr_lookup_rel (RelInfoArr * rel_arr ,const char * nspname ,
423
+ const char * relname ,Cluster whichCluster )
425
424
{
426
- static int relnum = 0 ;
425
+ int relnum ;
427
426
428
427
if (!rel_arr || !relname )
429
428
return NULL ;
430
429
431
- /* Test most recent lookup first, for speed */
432
- if (relnum < rel_arr -> nrels &&
433
- strcmp (rel_arr -> rels [relnum ].nspname ,nspname )== 0 &&
434
- strcmp (rel_arr -> rels [relnum ].relname ,relname )== 0 )
435
- return & rel_arr -> rels [relnum ];
436
-
437
- if (relnum + 1 < rel_arr -> nrels &&
438
- strcmp (rel_arr -> rels [relnum + 1 ].nspname ,nspname )== 0 &&
439
- strcmp (rel_arr -> rels [relnum + 1 ].relname ,relname )== 0 )
440
- return & rel_arr -> rels [relnum + 1 ];
441
-
430
+ /* Test next lookup first, for speed */
431
+ if (rel_arr -> cache_name_rel + 1 < rel_arr -> nrels &&
432
+ strcmp (rel_arr -> rels [rel_arr -> cache_name_rel + 1 ].nspname ,nspname )== 0 &&
433
+ strcmp (rel_arr -> rels [rel_arr -> cache_name_rel + 1 ].relname ,relname )== 0 )
434
+ {
435
+ rel_arr -> cache_name_rel ++ ;
436
+ return & rel_arr -> rels [rel_arr -> cache_name_rel ];
437
+ }
438
+
442
439
for (relnum = 0 ;relnum < rel_arr -> nrels ;relnum ++ )
443
440
{
444
441
if (strcmp (rel_arr -> rels [relnum ].nspname ,nspname )== 0 &&
445
442
strcmp (rel_arr -> rels [relnum ].relname ,relname )== 0 )
443
+ {
444
+ rel_arr -> cache_name_rel = relnum ;
446
445
return & rel_arr -> rels [relnum ];
446
+ }
447
447
}
448
448
pg_log (PG_FATAL ,"Could not find %s.%s in %s cluster\n" ,
449
449
nspname ,relname ,CLUSTERNAME (whichCluster ));
@@ -483,6 +483,7 @@ relarr_free(RelInfoArr *rel_arr)
483
483
{
484
484
pg_free (rel_arr -> rels );
485
485
rel_arr -> nrels = 0 ;
486
+ rel_arr -> cache_name_rel = 0 ;
486
487
}
487
488
488
489