@@ -1744,7 +1744,6 @@ static char *my_case_str(const char *str,
17441744
17451745static int switch_db_collation (FILE *sql_file,
17461746 const char *db_name,
1747- const char *delimiter,
17481747 const char *current_db_cl_name,
17491748 const char *required_db_cl_name,
17501749 int *db_cl_altered)
@@ -1760,11 +1759,10 @@ static int switch_db_collation(FILE *sql_file,
17601759 return 1 ;
17611760
17621761 fprintf (sql_file,
1763- " ALTER DATABASE %s CHARACTER SET %s COLLATE %s %s \n " ,
1762+ " ALTER DATABASE %s CHARACTER SET %s COLLATE %s ; \n " ,
17641763 (const char *) quoted_db_name,
17651764 (const char *) db_cl->cs_name .str ,
1766- (const char *) db_cl->coll_name .str ,
1767- (const char *) delimiter);
1765+ (const char *) db_cl->coll_name .str );
17681766
17691767 *db_cl_altered= 1 ;
17701768
@@ -1779,7 +1777,6 @@ static int switch_db_collation(FILE *sql_file,
17791777
17801778static int restore_db_collation (FILE *sql_file,
17811779 const char *db_name,
1782- const char *delimiter,
17831780 const char *db_cl_name)
17841781{
17851782 char quoted_db_buf[NAME_LEN * 2 + 3 ];
@@ -1791,100 +1788,71 @@ static int restore_db_collation(FILE *sql_file,
17911788 return 1 ;
17921789
17931790 fprintf (sql_file,
1794- " ALTER DATABASE %s CHARACTER SET %s COLLATE %s %s \n " ,
1791+ " ALTER DATABASE %s CHARACTER SET %s COLLATE %s ; \n " ,
17951792 (const char *) quoted_db_name,
17961793 (const char *) db_cl->cs_name .str ,
1797- (const char *) db_cl->coll_name .str ,
1798- (const char *) delimiter);
1794+ (const char *) db_cl->coll_name .str );
17991795
18001796 return 0 ;
18011797}
18021798
18031799
18041800static void switch_cs_variables (FILE *sql_file,
1805- const char *delimiter,
18061801 const char *character_set_client,
18071802 const char *character_set_results,
18081803 const char *collation_connection)
18091804{
18101805 fprintf (sql_file,
1811- " /*!50003 SET @saved_cs_client = @@character_set_client */ %s\n "
1812- " /*!50003 SET @saved_cs_results = @@character_set_results */ %s\n "
1813- " /*!50003 SET @saved_col_connection = @@collation_connection */ %s\n "
1814- " /*!50003 SET character_set_client = %s */ %s\n "
1815- " /*!50003 SET character_set_results = %s */ %s\n "
1816- " /*!50003 SET collation_connection = %s */ %s\n " ,
1817- (const char *) delimiter,
1818- (const char *) delimiter,
1819- (const char *) delimiter,
1820-
1806+ " /*!50003 SET @saved_cs_client = @@character_set_client */ ;\n "
1807+ " /*!50003 SET @saved_cs_results = @@character_set_results */ ;\n "
1808+ " /*!50003 SET @saved_col_connection = @@collation_connection */ ;\n "
1809+ " /*!50003 SET character_set_client = %s */ ;\n "
1810+ " /*!50003 SET character_set_results = %s */ ;\n "
1811+ " /*!50003 SET collation_connection = %s */ ;\n " ,
18211812 (const char *) character_set_client,
1822- (const char *) delimiter,
1823-
18241813 (const char *) character_set_results,
1825- (const char *) delimiter,
1826-
1827- (const char *) collation_connection,
1828- (const char *) delimiter);
1814+ (const char *) collation_connection);
18291815}
18301816
18311817
1832- static void restore_cs_variables (FILE *sql_file,
1833- const char *delimiter)
1818+ static void restore_cs_variables (FILE *sql_file)
18341819{
18351820 fprintf (sql_file,
1836- " /*!50003 SET character_set_client = @saved_cs_client */ %s\n "
1837- " /*!50003 SET character_set_results = @saved_cs_results */ %s\n "
1838- " /*!50003 SET collation_connection = @saved_col_connection */ %s\n " ,
1839- (const char *) delimiter,
1840- (const char *) delimiter,
1841- (const char *) delimiter);
1821+ " /*!50003 SET character_set_client = @saved_cs_client */ ;\n "
1822+ " /*!50003 SET character_set_results = @saved_cs_results */ ;\n "
1823+ " /*!50003 SET collation_connection = @saved_col_connection */ ;\n " );
18421824}
18431825
18441826
1845- static void switch_sql_mode (FILE *sql_file,
1846- const char *delimiter,
1847- const char *sql_mode)
1827+ static void switch_sql_mode (FILE *sql_file, const char *sql_mode)
18481828{
18491829 fprintf (sql_file,
1850- " /*!50003 SET @saved_sql_mode = @@sql_mode */ %s\n "
1851- " /*!50003 SET sql_mode = '%s' */ %s\n " ,
1852- (const char *) delimiter,
1853-
1854- (const char *) sql_mode,
1855- (const char *) delimiter);
1830+ " /*!50003 SET @saved_sql_mode = @@sql_mode */ ;\n "
1831+ " /*!50003 SET sql_mode = '%s' */ ;\n " ,
1832+ (const char *) sql_mode);
18561833}
18571834
18581835
1859- static void restore_sql_mode (FILE *sql_file,
1860- const char *delimiter)
1836+ static void restore_sql_mode (FILE *sql_file)
18611837{
18621838 fprintf (sql_file,
1863- " /*!50003 SET sql_mode = @saved_sql_mode */ %s\n " ,
1864- (const char *) delimiter);
1839+ " /*!50003 SET sql_mode = @saved_sql_mode */ ;\n " );
18651840}
18661841
18671842
1868- static void switch_time_zone (FILE *sql_file,
1869- const char *delimiter,
1870- const char *time_zone)
1843+ static void switch_time_zone (FILE *sql_file, const char *time_zone)
18711844{
18721845 fprintf (sql_file,
1873- " /*!50003 SET @saved_time_zone = @@time_zone */ %s\n "
1874- " /*!50003 SET time_zone = '%s' */ %s\n " ,
1875- (const char *) delimiter,
1876-
1877- (const char *) time_zone,
1878- (const char *) delimiter);
1846+ " /*!50003 SET @saved_time_zone = @@time_zone */ ;\n "
1847+ " /*!50003 SET time_zone = '%s' */ ;\n " ,
1848+ (const char *) time_zone);
18791849}
18801850
18811851
1882- static void restore_time_zone (FILE *sql_file,
1883- const char *delimiter)
1852+ static void restore_time_zone (FILE *sql_file)
18841853{
18851854 fprintf (sql_file,
1886- " /*!50003 SET time_zone = @saved_time_zone */ %s\n " ,
1887- (const char *) delimiter);
1855+ " /*!50003 SET time_zone = @saved_time_zone */ ;\n " );
18881856}
18891857
18901858
@@ -2679,44 +2647,6 @@ static void print_comment(FILE *sql_file, my_bool is_error, const char *format,
26792647 print_xml_comment (sql_file, strlen (comment_buff), comment_buff);
26802648}
26812649
2682- /*
2683- create_delimiter
2684- Generate a new (null-terminated) string that does not exist in query
2685- and is therefore suitable for use as a query delimiter. Store this
2686- delimiter in delimiter_buff .
2687-
2688- This is quite simple in that it doesn't even try to parse statements as an
2689- interpreter would. It merely returns a string that is not in the query, which
2690- is much more than adequate for constructing a delimiter.
2691-
2692- RETURN
2693- ptr to the delimiter on Success
2694- NULL on Failure
2695- */
2696- static char *create_delimiter (char *query, char *delimiter_buff,
2697- int delimiter_max_size)
2698- {
2699- int proposed_length;
2700- char *presence;
2701-
2702- delimiter_buff[0 ]= ' ;' ; /* start with one semicolon, and */
2703-
2704- for (proposed_length= 2 ; proposed_length < delimiter_max_size;
2705- delimiter_max_size++) {
2706-
2707- delimiter_buff[proposed_length-1 ]= ' ;' ; /* add semicolons, until */
2708- delimiter_buff[proposed_length]= ' \0 ' ;
2709-
2710- presence = strstr (query, delimiter_buff);
2711- if (presence == NULL ) { /* the proposed delimiter is not in the query. */
2712- return delimiter_buff;
2713- }
2714-
2715- }
2716- return NULL ; /* but if we run out of space, return nothing at all. */
2717- }
2718-
2719-
27202650/*
27212651 dump_events_for_db
27222652 -- retrieves list of events for a given db, and prints out
@@ -2731,7 +2661,6 @@ static uint dump_events_for_db(char *db)
27312661 char query_buff[QUERY_LENGTH ];
27322662 char db_name_buff[NAME_LEN *2 +3 ], name_buff[NAME_LEN *2 +3 ];
27332663 char *event_name;
2734- char delimiter[QUERY_LENGTH ];
27352664 FILE *sql_file= md_result_file;
27362665 MYSQL_RES *event_res= NULL , *event_list_res= NULL ;
27372666 MYSQL_ROW row, event_list_row;
@@ -2759,7 +2688,6 @@ static uint dump_events_for_db(char *db)
27592688 if (mysql_query_with_error_report (mysql, &event_list_res, " show events" ))
27602689 DBUG_RETURN (0 );
27612690
2762- safe_strcpy (delimiter, sizeof (delimiter), " ;" );
27632691 if (mysql_num_rows (event_list_res) > 0 )
27642692 {
27652693 if (opt_xml)
@@ -2805,25 +2733,16 @@ static uint dump_events_for_db(char *db)
28052733 char *query_str;
28062734
28072735 if (opt_drop)
2808- fprintf (sql_file, " /*!50106 DROP EVENT IF EXISTS %s */%s\n " ,
2809- event_name, delimiter);
2810-
2811- if (create_delimiter (row[3 ], delimiter, sizeof (delimiter)) == NULL )
2812- {
2813- fprintf (stderr, " %s: Warning: Can't create delimiter for event '%s'\n " ,
2814- my_progname_short, event_name);
2815- goto err;
2816- }
2817-
2818- fprintf (sql_file, " DELIMITER %s\n " , delimiter);
2736+ fprintf (sql_file, " /*!50106 DROP EVENT IF EXISTS %s */;\n " ,
2737+ event_name);
28192738
28202739 if (mysql_num_fields (event_res) >= 7 )
28212740 {
2822- if (switch_db_collation (sql_file, db_name_buff, delimiter,
2741+ if (switch_db_collation (sql_file, db_name_buff,
28232742 db_cl_name, row[6 ], &db_cl_altered))
28242743 goto err;
28252744
2826- switch_cs_variables (sql_file, delimiter,
2745+ switch_cs_variables (sql_file,
28272746 row[4 ], /* character_set_client */
28282747 row[4 ], /* character_set_results */
28292748 row[5 ]); /* collation_connection */
@@ -2846,32 +2765,31 @@ static uint dump_events_for_db(char *db)
28462765 " --\n " );
28472766 }
28482767
2849- switch_sql_mode (sql_file, delimiter, row[1 ]);
2768+ switch_sql_mode (sql_file, row[1 ]);
28502769
2851- switch_time_zone (sql_file, delimiter, row[2 ]);
2770+ switch_time_zone (sql_file, row[2 ]);
28522771
28532772 query_str= cover_definer_clause (row[3 ], strlen (row[3 ]),
28542773 C_STRING_WITH_LEN (" 50117" ),
28552774 C_STRING_WITH_LEN (" 50106" ),
28562775 C_STRING_WITH_LEN (" EVENT" ));
28572776
2858- fprintf (sql_file,
2859- " /*!50106 %s \n */ %s \n " ,
2860- ( const char *) (query_str != NULL ? query_str : row[ 3 ]) ,
2861- (const char *) delimiter );
2777+ fprintf (sql_file, " DELIMITER ;; \n "
2778+ " /*!50106 %s \n */ ;; \n "
2779+ " DELIMITER ; \n " ,
2780+ (const char *) (query_str != NULL ? query_str : row[ 3 ]) );
28622781
28632782 my_free (query_str);
2864- restore_time_zone (sql_file, delimiter );
2865- restore_sql_mode (sql_file, delimiter );
2783+ restore_time_zone (sql_file);
2784+ restore_sql_mode (sql_file);
28662785
28672786 if (mysql_num_fields (event_res) >= 7 )
28682787 {
2869- restore_cs_variables (sql_file, delimiter );
2788+ restore_cs_variables (sql_file);
28702789
28712790 if (db_cl_altered)
28722791 {
2873- if (restore_db_collation (sql_file, db_name_buff, delimiter,
2874- db_cl_name))
2792+ if (restore_db_collation (sql_file, db_name_buff, db_cl_name))
28752793 goto err;
28762794 }
28772795 }
@@ -2888,7 +2806,6 @@ static uint dump_events_for_db(char *db)
28882806 }
28892807 else
28902808 {
2891- fprintf (sql_file, " DELIMITER ;\n " );
28922809 fprintf (sql_file, " /*!50106 SET TIME_ZONE= @save_time_zone */ ;\n " );
28932810 }
28942811
@@ -3048,15 +2965,15 @@ static uint dump_routines_for_db(char *db)
30482965 continue ;
30492966 }
30502967
3051- switch_sql_mode (sql_file, " ; " , row[1 ]);
2968+ switch_sql_mode (sql_file, row[1 ]);
30522969
30532970 if (opt_drop)
30542971 fprintf (sql_file, " /*!50003 DROP %s IF EXISTS %s */;\n " ,
30552972 routine_type[i], routine_name);
30562973
30572974 if (mysql_num_fields (routine_res) >= 6 )
30582975 {
3059- if (switch_db_collation (sql_file, db, " ; " ,
2976+ if (switch_db_collation (sql_file, db,
30602977 db_cl_name, row[5 ], &db_cl_altered))
30612978 {
30622979 mysql_free_result (routine_res);
@@ -3065,7 +2982,7 @@ static uint dump_routines_for_db(char *db)
30652982 DBUG_RETURN (1 );
30662983 }
30672984
3068- switch_cs_variables (sql_file, " ; " ,
2985+ switch_cs_variables (sql_file,
30692986 row[3 ], /* character_set_client */
30702987 row[3 ], /* character_set_results */
30712988 row[4 ]); /* collation_connection */
@@ -3096,15 +3013,15 @@ static uint dump_routines_for_db(char *db)
30963013 " DELIMITER ;\n " ,
30973014 (const char *) row[2 ]);
30983015
3099- restore_sql_mode (sql_file, " ; " );
3016+ restore_sql_mode (sql_file);
31003017
31013018 if (mysql_num_fields (routine_res) >= 6 )
31023019 {
3103- restore_cs_variables (sql_file, " ; " );
3020+ restore_cs_variables (sql_file);
31043021
31053022 if (db_cl_altered)
31063023 {
3107- if (restore_db_collation (sql_file, db, " ; " , db_cl_name))
3024+ if (restore_db_collation (sql_file, db, db_cl_name))
31083025 {
31093026 mysql_free_result (routine_res);
31103027 mysql_free_result (routine_list_res);
@@ -4010,16 +3927,16 @@ static int dump_trigger(FILE *sql_file, MYSQL_RES *show_create_trigger_rs,
40103927 continue ;
40113928 }
40123929
4013- if (switch_db_collation (sql_file, db_name, " ; " ,
3930+ if (switch_db_collation (sql_file, db_name,
40143931 db_cl_name, row[5 ], &db_cl_altered))
40153932 DBUG_RETURN (TRUE );
40163933
4017- switch_cs_variables (sql_file, " ; " ,
3934+ switch_cs_variables (sql_file,
40183935 row[3 ], /* character_set_client */
40193936 row[3 ], /* character_set_results */
40203937 row[4 ]); /* collation_connection */
40213938
4022- switch_sql_mode (sql_file, " ; " , row[1 ]);
3939+ switch_sql_mode (sql_file, row[1 ]);
40233940
40243941 if (opt_drop_trigger)
40253942 fprintf (sql_file, " /*!50032 DROP TRIGGER IF EXISTS %s */;\n " ,
@@ -4037,12 +3954,12 @@ static int dump_trigger(FILE *sql_file, MYSQL_RES *show_create_trigger_rs,
40373954
40383955 my_free (query_str);
40393956
4040- restore_sql_mode (sql_file, " ; " );
4041- restore_cs_variables (sql_file, " ; " );
3957+ restore_sql_mode (sql_file);
3958+ restore_cs_variables (sql_file);
40423959
40433960 if (db_cl_altered)
40443961 {
4045- if (restore_db_collation (sql_file, db_name, " ; " , db_cl_name))
3962+ if (restore_db_collation (sql_file, db_name, db_cl_name))
40463963 DBUG_RETURN (TRUE );
40473964 }
40483965 }
0 commit comments