@@ -335,8 +335,8 @@ int EXTRACT_list_table(const QualifiedMetaString& relation_name,
335335 bool first = true;
336336 string char_sets;
337337 rel_t rel_type = rel_persistent;
338- char ss[28] = "" ;
339- Firebird::string tableSpaceName ;
338+ const char* security = nullptr ;
339+ MetaString tablespaceName ;
340340
341341 // Query to obtain relation detail information
342342
@@ -381,19 +381,15 @@ int EXTRACT_list_table(const QualifiedMetaString& relation_name,
381381
382382 isqlGlob.printf("%s ", IUTILS_name_to_string(new_name.object.hasData() ? new_name : relation_name).c_str());
383383
384- fb_utils::exact_name(REL.RDB$TABLESPACE_NAME);
385- if (!REL.RDB$TABLESPACE_NAME.NULL && strcmp(REL.RDB$TABLESPACE_NAME, PRIMARY_TABLESPACE_NAME))
386- {
387- IUTILS_copy_SQL_id(REL.RDB$TABLESPACE_NAME, SQL_identifier, DBL_QUOTE);
388- tableSpaceName.printf(" TABLESPACE %s", SQL_identifier);
389- }
384+ if (!REL.RDB$TABLESPACE_NAME.NULL)
385+ tablespaceName = REL.RDB$TABLESPACE_NAME;
390386
391387 if (!REL.RDB$SQL_SECURITY.NULL)
392388 {
393389 if (REL.RDB$SQL_SECURITY)
394- strcpy(ss, "SQL SECURITY DEFINER") ;
390+ security = "SQL SECURITY DEFINER";
395391 else
396- strcpy(ss, "SQL SECURITY INVOKER") ;
392+ security = "SQL SECURITY INVOKER";
397393 }
398394
399395 if (!REL.RDB$EXTERNAL_FILE.NULL)
@@ -628,15 +624,20 @@ int EXTRACT_list_table(const QualifiedMetaString& relation_name,
628624 if (first) // we extracted nothing
629625 return FINI_ERROR;
630626
631- const char* gtt_scope = (rel_type == rel_global_temp_preserve) ? "ON COMMIT PRESERVE ROWS" :
632- ((rel_type == rel_global_temp_delete) ? "ON COMMIT DELETE ROWS" : "");
627+ isqlGlob.printf(")");
633628
634- const char* opt_delim = *gtt_scope && *ss ? ", " : "";
629+ if (tablespaceName.hasData() && tablespaceName != PRIMARY_TABLESPACE_NAME)
630+ isqlGlob.printf(" TABLESPACE %s", IUTILS_name_to_string(tablespaceName).c_str());
635631
636- if (*gtt_scope || *ss)
637- isqlGlob.printf(")%s %s%s%s%s", tableSpaceName.c_str(), NEWLINE, gtt_scope, opt_delim , ss);
638- else
639- isqlGlob.printf(")%s", tableSpaceName.c_str());
632+ const char* gttScope = (rel_type == rel_global_temp_preserve) ? "ON COMMIT PRESERVE ROWS" :
633+ ((rel_type == rel_global_temp_delete) ? "ON COMMIT DELETE ROWS" : nullptr);
634+
635+ if (gttScope && security)
636+ isqlGlob.printf(" %s%s, %s", NEWLINE, gttScope, security);
637+ else if (gttScope)
638+ isqlGlob.printf(" %s%s", NEWLINE, gttScope);
639+ else if (security)
640+ isqlGlob.printf(" %s%s", NEWLINE, security);
640641
641642 isqlGlob.printf("%s%s", isqlGlob.global_Term, NEWLINE);
642643 return FINI_OK;
@@ -3170,9 +3171,12 @@ static void list_indexes()
31703171 SHOW_print_metadata_text_blob(isqlGlob.Out, &IDX.RDB$CONDITION_SOURCE, false, true);
31713172 }
31723173
3173- fb_utils::exact_name(IDX.RDB$TABLESPACE_NAME);
3174- if (strcmp(IDX.RDB$TABLESPACE_NAME, PRIMARY_TABLESPACE_NAME))
3175- isqlGlob.printf(" TABLESPACE %s", IDX.RDB$TABLESPACE_NAME);
3174+ if (!IDX.RDB$TABLESPACE_NAME.NULL)
3175+ {
3176+ const MetaString tablespaceName(IDX.RDB$TABLESPACE_NAME);
3177+ if (tablespaceName != PRIMARY_TABLESPACE_NAME)
3178+ isqlGlob.printf(" TABLESPACE %s", IUTILS_name_to_string(tablespaceName).c_str());
3179+ }
31763180
31773181 isqlGlob.printf("%s%s", isqlGlob.global_Term, NEWLINE);
31783182 }
@@ -3452,8 +3456,7 @@ static void list_tablespaces()
34523456
34533457 bool first = true;
34543458
3455- FOR X IN RDB$TABLESPACES WITH
3456- (X.RDB$SYSTEM_FLAG NE 1 OR X.RDB$SYSTEM_FLAG MISSING)
3459+ FOR X IN RDB$TABLESPACES WITH X.RDB$SYSTEM_FLAG EQ 0
34573460 SORTED BY X.RDB$TABLESPACE_NAME
34583461
34593462 if (first)
@@ -3462,25 +3465,21 @@ static void list_tablespaces()
34623465 first = false;
34633466 }
34643467
3465- fb_utils::exact_name(X.RDB$TABLESPACE_NAME);
3466- fb_utils::exact_name(X.RDB$FILE_NAME);
3467- fb_utils::exact_name(X.RDB$OWNER_NAME);
3468-
3469- if (isqlGlob.db_SQL_dialect > SQL_DIALECT_V6_TRANSITION)
3470- IUTILS_copy_SQL_id (X.RDB$TABLESPACE_NAME, SQL_identifier, DBL_QUOTE);
3471- else
3472- strcpy(SQL_identifier, X.RDB$TABLESPACE_NAME);
3468+ const MetaString tablespaceName(X.RDB$TABLESPACE_NAME);
3469+ const MetaString ownerName(X.RDB$OWNER_NAME);
34733470
34743471 isqlGlob.printf("%s/* Tablespace: %s, Owner: %s */%s",
34753472 NEWLINE,
3476- X.RDB$TABLESPACE_NAME ,
3477- X.RDB$OWNER_NAME ,
3473+ IUTILS_name_to_string(tablespaceName).c_str() ,
3474+ IUTILS_name_to_string(ownerName).c_str() ,
34783475 NEWLINE);
34793476
34803477 const char* offline = X.RDB$OFFLINE.NULL || !X.RDB$OFFLINE ? "ONLINE" : "OFFLINE";
34813478 const char* readonly = X.RDB$READ_ONLY.NULL || !X.RDB$READ_ONLY ? "READ WRITE" : "READ ONLY";
34823479
3483- isqlGlob.printf("CREATE TABLESPACE %s FILE '%s' %s %s", SQL_identifier, X.RDB$FILE_NAME, offline, readonly);
3480+ fb_utils::exact_name(X.RDB$FILE_NAME);
3481+ isqlGlob.printf("CREATE TABLESPACE %s FILE '%s' %s %s",
3482+ IUTILS_name_to_string(tablespaceName).c_str(), X.RDB$FILE_NAME, offline, readonly);
34843483
34853484 isqlGlob.printf("%s%s", Procterm, NEWLINE);
34863485
0 commit comments