Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit9adda24

Browse files
committed
Refactor code of reindexdb for query generation
This merges the portion related to REINDEX SYSTEM into the routinealready available for all the other reindex types, making the querygeneration cleaner. While on it, change the handling of the reindextypes using an enum, which allows to get rid of the hardcoded stringsused directly in the query generation present for the same purpose (aka"TABLE", "DATABASE", etc.).Per discussion with Julien Rouhaud, Tom Lane, Alvaro Herrera and me.Author: Julien RouhaudDiscussion:https://postgr.es/m/CAOBaU_bSmSik_WRK9niDnm-3NkNZky6+uKxkmQwvthZvMWpS5A@mail.gmail.com
1 parentc72f9b9 commit9adda24

File tree

2 files changed

+90
-75
lines changed

2 files changed

+90
-75
lines changed

‎src/bin/scripts/reindexdb.c

Lines changed: 89 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,18 @@
1515
#include"fe_utils/simple_list.h"
1616
#include"fe_utils/string_utils.h"
1717

18+
typedefenumReindexType
19+
{
20+
REINDEX_DATABASE,
21+
REINDEX_INDEX,
22+
REINDEX_SCHEMA,
23+
REINDEX_SYSTEM,
24+
REINDEX_TABLE
25+
}ReindexType;
26+
1827

1928
staticvoidreindex_one_database(constchar*name,constchar*dbname,
20-
constchar*type,constchar*host,
29+
ReindexTypetype,constchar*host,
2130
constchar*port,constchar*username,
2231
enumtrivalueprompt_password,constchar*progname,
2332
boolecho,boolverbose,boolconcurrently);
@@ -26,11 +35,6 @@ static void reindex_all_databases(const char *maintenance_db,
2635
constchar*username,enumtrivalueprompt_password,
2736
constchar*progname,boolecho,
2837
boolquiet,boolverbose,boolconcurrently);
29-
staticvoidreindex_system_catalogs(constchar*dbname,
30-
constchar*host,constchar*port,
31-
constchar*username,enumtrivalueprompt_password,
32-
constchar*progname,boolecho,boolverbose,
33-
boolconcurrently);
3438
staticvoidhelp(constchar*progname);
3539

3640
int
@@ -220,8 +224,9 @@ main(int argc, char *argv[])
220224
dbname=get_user_name_or_exit(progname);
221225
}
222226

223-
reindex_system_catalogs(dbname,host,port,username,prompt_password,
224-
progname,echo,verbose,concurrently);
227+
reindex_one_database(NULL,dbname,REINDEX_SYSTEM,host,
228+
port,username,prompt_password,progname,
229+
echo,verbose,concurrently);
225230
}
226231
else
227232
{
@@ -241,8 +246,9 @@ main(int argc, char *argv[])
241246

242247
for (cell=schemas.head;cell;cell=cell->next)
243248
{
244-
reindex_one_database(cell->val,dbname,"SCHEMA",host,port,
245-
username,prompt_password,progname,echo,verbose,concurrently);
249+
reindex_one_database(cell->val,dbname,REINDEX_SCHEMA,host,
250+
port,username,prompt_password,progname,
251+
echo,verbose,concurrently);
246252
}
247253
}
248254

@@ -252,8 +258,9 @@ main(int argc, char *argv[])
252258

253259
for (cell=indexes.head;cell;cell=cell->next)
254260
{
255-
reindex_one_database(cell->val,dbname,"INDEX",host,port,
256-
username,prompt_password,progname,echo,verbose,concurrently);
261+
reindex_one_database(cell->val,dbname,REINDEX_INDEX,host,
262+
port,username,prompt_password,progname,
263+
echo,verbose,concurrently);
257264
}
258265
}
259266
if (tables.head!=NULL)
@@ -262,8 +269,9 @@ main(int argc, char *argv[])
262269

263270
for (cell=tables.head;cell;cell=cell->next)
264271
{
265-
reindex_one_database(cell->val,dbname,"TABLE",host,port,
266-
username,prompt_password,progname,echo,verbose,concurrently);
272+
reindex_one_database(cell->val,dbname,REINDEX_TABLE,host,
273+
port,username,prompt_password,progname,
274+
echo,verbose,concurrently);
267275
}
268276
}
269277

@@ -272,21 +280,21 @@ main(int argc, char *argv[])
272280
* specified
273281
*/
274282
if (indexes.head==NULL&&tables.head==NULL&&schemas.head==NULL)
275-
reindex_one_database(NULL,dbname,"DATABASE",host,port,
276-
username,prompt_password,progname,echo,verbose,concurrently);
283+
reindex_one_database(NULL,dbname,REINDEX_DATABASE,host,
284+
port,username,prompt_password,progname,
285+
echo,verbose,concurrently);
277286
}
278287

279288
exit(0);
280289
}
281290

282291
staticvoid
283-
reindex_one_database(constchar*name,constchar*dbname,constchar*type,
292+
reindex_one_database(constchar*name,constchar*dbname,ReindexTypetype,
284293
constchar*host,constchar*port,constchar*username,
285294
enumtrivalueprompt_password,constchar*progname,boolecho,
286295
boolverbose,boolconcurrently)
287296
{
288297
PQExpBufferDatasql;
289-
290298
PGconn*conn;
291299

292300
conn=connectDatabase(dbname,host,port,username,prompt_password,
@@ -300,40 +308,81 @@ reindex_one_database(const char *name, const char *dbname, const char *type,
300308
exit(1);
301309
}
302310

311+
/* build the REINDEX query */
303312
initPQExpBuffer(&sql);
304313

305314
appendPQExpBufferStr(&sql,"REINDEX ");
306315

307316
if (verbose)
308317
appendPQExpBufferStr(&sql,"(VERBOSE) ");
309318

310-
appendPQExpBufferStr(&sql,type);
311-
appendPQExpBufferChar(&sql,' ');
319+
/* object type */
320+
switch (type)
321+
{
322+
caseREINDEX_DATABASE:
323+
appendPQExpBufferStr(&sql,"DATABASE ");
324+
break;
325+
caseREINDEX_INDEX:
326+
appendPQExpBufferStr(&sql,"INDEX ");
327+
break;
328+
caseREINDEX_SCHEMA:
329+
appendPQExpBufferStr(&sql,"SCHEMA ");
330+
break;
331+
caseREINDEX_SYSTEM:
332+
appendPQExpBufferStr(&sql,"SYSTEM ");
333+
break;
334+
caseREINDEX_TABLE:
335+
appendPQExpBufferStr(&sql,"TABLE ");
336+
break;
337+
}
338+
312339
if (concurrently)
313340
appendPQExpBufferStr(&sql,"CONCURRENTLY ");
314-
if (strcmp(type,"TABLE")==0||
315-
strcmp(type,"INDEX")==0)
316-
appendQualifiedRelation(&sql,name,conn,progname,echo);
317-
elseif (strcmp(type,"SCHEMA")==0)
318-
appendPQExpBufferStr(&sql,name);
319-
elseif (strcmp(type,"DATABASE")==0)
320-
appendPQExpBufferStr(&sql,fmtId(PQdb(conn)));
341+
342+
/* object name */
343+
switch (type)
344+
{
345+
caseREINDEX_DATABASE:
346+
caseREINDEX_SYSTEM:
347+
appendPQExpBufferStr(&sql,fmtId(PQdb(conn)));
348+
break;
349+
caseREINDEX_INDEX:
350+
caseREINDEX_TABLE:
351+
appendQualifiedRelation(&sql,name,conn,progname,echo);
352+
break;
353+
caseREINDEX_SCHEMA:
354+
appendPQExpBufferStr(&sql,name);
355+
break;
356+
}
357+
358+
/* finish the query */
321359
appendPQExpBufferChar(&sql,';');
322360

323361
if (!executeMaintenanceCommand(conn,sql.data,echo))
324362
{
325-
if (strcmp(type,"TABLE")==0)
326-
pg_log_error("reindexing of table \"%s\" in database \"%s\" failed: %s",
327-
name,PQdb(conn),PQerrorMessage(conn));
328-
elseif (strcmp(type,"INDEX")==0)
329-
pg_log_error("reindexing of index \"%s\" in database \"%s\" failed: %s",
330-
name,PQdb(conn),PQerrorMessage(conn));
331-
elseif (strcmp(type,"SCHEMA")==0)
332-
pg_log_error("reindexing of schema \"%s\" in database \"%s\" failed: %s",
333-
name,PQdb(conn),PQerrorMessage(conn));
334-
else
335-
pg_log_error("reindexing of database \"%s\" failed: %s",
336-
PQdb(conn),PQerrorMessage(conn));
363+
switch (type)
364+
{
365+
caseREINDEX_DATABASE:
366+
pg_log_error("reindexing of database \"%s\" failed: %s",
367+
PQdb(conn),PQerrorMessage(conn));
368+
break;
369+
caseREINDEX_INDEX:
370+
pg_log_error("reindexing of index \"%s\" in database \"%s\" failed: %s",
371+
name,PQdb(conn),PQerrorMessage(conn));
372+
break;
373+
caseREINDEX_SCHEMA:
374+
pg_log_error("reindexing of schema \"%s\" in database \"%s\" failed: %s",
375+
name,PQdb(conn),PQerrorMessage(conn));
376+
break;
377+
caseREINDEX_SYSTEM:
378+
pg_log_error("reindexing of system catalogs on database \"%s\" failed: %s",
379+
PQdb(conn),PQerrorMessage(conn));
380+
break;
381+
caseREINDEX_TABLE:
382+
pg_log_error("reindexing of table \"%s\" in database \"%s\" failed: %s",
383+
name,PQdb(conn),PQerrorMessage(conn));
384+
break;
385+
}
337386
PQfinish(conn);
338387
exit(1);
339388
}
@@ -374,7 +423,7 @@ reindex_all_databases(const char *maintenance_db,
374423
appendPQExpBuffer(&connstr,"dbname=");
375424
appendConnStrVal(&connstr,dbname);
376425

377-
reindex_one_database(NULL,connstr.data,"DATABASE",host,
426+
reindex_one_database(NULL,connstr.data,REINDEX_DATABASE,host,
378427
port,username,prompt_password,
379428
progname,echo,verbose,concurrently);
380429
}
@@ -383,41 +432,6 @@ reindex_all_databases(const char *maintenance_db,
383432
PQclear(result);
384433
}
385434

386-
staticvoid
387-
reindex_system_catalogs(constchar*dbname,constchar*host,constchar*port,
388-
constchar*username,enumtrivalueprompt_password,
389-
constchar*progname,boolecho,boolverbose,boolconcurrently)
390-
{
391-
PGconn*conn;
392-
PQExpBufferDatasql;
393-
394-
conn=connectDatabase(dbname,host,port,username,prompt_password,
395-
progname,echo, false, false);
396-
397-
initPQExpBuffer(&sql);
398-
399-
appendPQExpBuffer(&sql,"REINDEX");
400-
401-
if (verbose)
402-
appendPQExpBuffer(&sql," (VERBOSE)");
403-
404-
appendPQExpBufferStr(&sql," SYSTEM ");
405-
if (concurrently)
406-
appendPQExpBuffer(&sql,"CONCURRENTLY ");
407-
appendPQExpBufferStr(&sql,fmtId(PQdb(conn)));
408-
appendPQExpBufferChar(&sql,';');
409-
410-
if (!executeMaintenanceCommand(conn,sql.data,echo))
411-
{
412-
pg_log_error("reindexing of system catalogs failed: %s",
413-
PQerrorMessage(conn));
414-
PQfinish(conn);
415-
exit(1);
416-
}
417-
PQfinish(conn);
418-
termPQExpBuffer(&sql);
419-
}
420-
421435
staticvoid
422436
help(constchar*progname)
423437
{

‎src/tools/pgindent/typedefs.list

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1981,6 +1981,7 @@ RegisNode
19811981
RegisteredBgWorker
19821982
ReindexObjectType
19831983
ReindexStmt
1984+
ReindexType
19841985
RelFileNode
19851986
RelFileNodeBackend
19861987
RelIdCacheEnt

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp