1- // Copyright © 2004, 2015 , Oracle and/or its affiliates. All rights reserved.
1+ // Copyright © 2004, 2018 , Oracle and/or its affiliates. All rights reserved.
22//
33// MySQL Connector/NET is licensed under the terms of the GPLv2
44// <http://www.gnu.org/licenses/old-licenses/gpl-2.0.html>, like most
@@ -294,8 +294,10 @@ public virtual MySqlSchemaCollection GetIndexes(string[] restrictions)
294294
295295 foreach ( MySqlSchemaRow index in indexes . Rows )
296296 {
297- long seq_index = ( long ) index [ "SEQ_IN_INDEX" ] ;
298- if ( seq_index != 1 ) continue ;
297+ if ( 1 != ( connection . driver . Version . isAtLeast ( 8 , 0 , 1 ) ?
298+ ( uint ) index [ "SEQ_IN_INDEX" ] :
299+ ( long ) index [ "SEQ_IN_INDEX" ] ) )
300+ continue ;
299301 if ( restrictions != null && restrictions . Length == 4 &&
300302 restrictions [ 3 ] != null &&
301303 ! index [ "KEY_NAME" ] . Equals ( restrictions [ 3 ] ) ) continue ;
@@ -304,7 +306,9 @@ public virtual MySqlSchemaCollection GetIndexes(string[] restrictions)
304306 row [ "INDEX_SCHEMA" ] = table [ "TABLE_SCHEMA" ] ;
305307 row [ "INDEX_NAME" ] = index [ "KEY_NAME" ] ;
306308 row [ "TABLE_NAME" ] = index [ "TABLE" ] ;
307- row [ "UNIQUE" ] = ( long ) index [ "NON_UNIQUE" ] == 0 ;
309+ row [ "UNIQUE" ] = connection . driver . Version . isAtLeast ( 8 , 0 , 1 ) ?
310+ Convert . ToInt64 ( index [ "NON_UNIQUE" ] ) == 0 :
311+ ( long ) index [ "NON_UNIQUE" ] == 0 ;
308312 row [ "PRIMARY" ] = index [ "KEY_NAME" ] . Equals ( "PRIMARY" ) ;
309313 row [ "TYPE" ] = index [ "INDEX_TYPE" ] ;
310314 row [ "COMMENT" ] = index [ "COMMENT" ] ;
@@ -606,48 +610,100 @@ public virtual MySqlSchemaCollection GetProcedures(string[] restrictions)
606610 dt . AddColumn ( "ROUTINE_COMMENT" , typeof ( string ) ) ;
607611 dt . AddColumn ( "DEFINER" , typeof ( string ) ) ;
608612
609- StringBuilder sql = new StringBuilder ( "SELECT * FROM mysql.proc WHERE 1=1" ) ;
610- if ( restrictions != null )
613+ StringBuilder sql = null ;
614+
615+ if ( connection . driver . Version . isAtLeast ( 8 , 0 , 1 ) )
611616 {
612- if ( restrictions . Length >= 2 && restrictions [ 1 ] != null )
613- sql . AppendFormat ( CultureInfo . InvariantCulture ,
614- " AND db LIKE '{0}'" , restrictions [ 1 ] ) ;
615- if ( restrictions . Length >= 3 && restrictions [ 2 ] != null )
616- sql . AppendFormat ( CultureInfo . InvariantCulture ,
617- " AND name LIKE '{0}'" , restrictions [ 2 ] ) ;
618- if ( restrictions . Length >= 4 && restrictions [ 3 ] != null )
619- sql . AppendFormat ( CultureInfo . InvariantCulture ,
620- " AND type LIKE '{0}'" , restrictions [ 3 ] ) ;
621- }
617+ sql = new StringBuilder ( "SELECT * FROM information_schema.routines WHERE 1=1" ) ;
618+ if ( restrictions != null )
619+ {
620+ if ( restrictions . Length >= 2 && restrictions [ 1 ] != null )
621+ sql . AppendFormat ( CultureInfo . InvariantCulture ,
622+ " AND routine_schema LIKE '{0}'" , restrictions [ 1 ] ) ;
623+ if ( restrictions . Length >= 3 && restrictions [ 2 ] != null )
624+ sql . AppendFormat ( CultureInfo . InvariantCulture ,
625+ " AND routine_name LIKE '{0}'" , restrictions [ 2 ] ) ;
626+ if ( restrictions . Length >= 4 && restrictions [ 3 ] != null )
627+ sql . AppendFormat ( CultureInfo . InvariantCulture ,
628+ " AND routine_type LIKE '{0}'" , restrictions [ 3 ] ) ;
629+ }
622630
623- MySqlCommand cmd = new MySqlCommand ( sql . ToString ( ) , connection ) ;
624- using ( MySqlDataReader reader = cmd . ExecuteReader ( ) )
631+ MySqlCommand cmd = new MySqlCommand ( sql . ToString ( ) , connection ) ;
632+ using ( MySqlDataReader reader = cmd . ExecuteReader ( ) )
633+ {
634+ while ( reader . Read ( ) )
635+ {
636+ MySqlSchemaRow row = dt . AddRow ( ) ;
637+ row [ "SPECIFIC_NAME" ] = reader . GetString ( "specific_name" ) ;
638+ row [ "ROUTINE_CATALOG" ] = DBNull . Value ;
639+ row [ "ROUTINE_SCHEMA" ] = reader . GetString ( "routine_schema" ) ;
640+ row [ "ROUTINE_NAME" ] = reader . GetString ( "routine_name" ) ;
641+ string routineType = reader . GetString ( "routine_type" ) ;
642+ row [ "ROUTINE_TYPE" ] = routineType ;
643+ row [ "DTD_IDENTIFIER" ] = StringUtility . ToLowerInvariant ( routineType ) == "function" ?
644+ ( object ) reader . GetString ( "DTD_IDENTIFIER" ) : DBNull . Value ;
645+ row [ "ROUTINE_BODY" ] = "SQL" ;
646+ row [ "ROUTINE_DEFINITION" ] = reader . GetString ( "routine_definition" ) ;
647+ row [ "EXTERNAL_NAME" ] = DBNull . Value ;
648+ row [ "EXTERNAL_LANGUAGE" ] = DBNull . Value ;
649+ row [ "PARAMETER_STYLE" ] = "SQL" ;
650+ row [ "IS_DETERMINISTIC" ] = reader . GetString ( "is_deterministic" ) ;
651+ row [ "SQL_DATA_ACCESS" ] = reader . GetString ( "sql_data_access" ) ;
652+ row [ "SQL_PATH" ] = DBNull . Value ;
653+ row [ "SECURITY_TYPE" ] = reader . GetString ( "security_type" ) ;
654+ row [ "CREATED" ] = reader . GetDateTime ( "created" ) ;
655+ row [ "LAST_ALTERED" ] = reader . GetDateTime ( "last_altered" ) ;
656+ row [ "SQL_MODE" ] = reader . GetString ( "sql_mode" ) ;
657+ row [ "ROUTINE_COMMENT" ] = reader . GetString ( "routine_comment" ) ;
658+ row [ "DEFINER" ] = reader . GetString ( "definer" ) ;
659+ }
660+ }
661+ }
662+ else
625663 {
626- while ( reader . Read ( ) )
664+ sql = new StringBuilder ( "SELECT * FROM mysql.proc WHERE 1=1" ) ;
665+ if ( restrictions != null )
627666 {
628- MySqlSchemaRow row = dt . AddRow ( ) ;
629- row [ "SPECIFIC_NAME" ] = reader . GetString ( "specific_name" ) ;
630- row [ "ROUTINE_CATALOG" ] = DBNull . Value ;
631- row [ "ROUTINE_SCHEMA" ] = reader . GetString ( "db" ) ;
632- row [ "ROUTINE_NAME" ] = reader . GetString ( "name" ) ;
633- string routineType = reader . GetString ( "type" ) ;
634- row [ "ROUTINE_TYPE" ] = routineType ;
635- row [ "DTD_IDENTIFIER" ] = StringUtility . ToLowerInvariant ( routineType ) == "function" ?
636- ( object ) reader . GetString ( "returns" ) : DBNull . Value ;
637- row [ "ROUTINE_BODY" ] = "SQL" ;
638- row [ "ROUTINE_DEFINITION" ] = reader . GetString ( "body" ) ;
639- row [ "EXTERNAL_NAME" ] = DBNull . Value ;
640- row [ "EXTERNAL_LANGUAGE" ] = DBNull . Value ;
641- row [ "PARAMETER_STYLE" ] = "SQL" ;
642- row [ "IS_DETERMINISTIC" ] = reader . GetString ( "is_deterministic" ) ;
643- row [ "SQL_DATA_ACCESS" ] = reader . GetString ( "sql_data_access" ) ;
644- row [ "SQL_PATH" ] = DBNull . Value ;
645- row [ "SECURITY_TYPE" ] = reader . GetString ( "security_type" ) ;
646- row [ "CREATED" ] = reader . GetDateTime ( "created" ) ;
647- row [ "LAST_ALTERED" ] = reader . GetDateTime ( "modified" ) ;
648- row [ "SQL_MODE" ] = reader . GetString ( "sql_mode" ) ;
649- row [ "ROUTINE_COMMENT" ] = reader . GetString ( "comment" ) ;
650- row [ "DEFINER" ] = reader . GetString ( "definer" ) ;
667+ if ( restrictions . Length >= 2 && restrictions [ 1 ] != null )
668+ sql . AppendFormat ( CultureInfo . InvariantCulture ,
669+ " AND db LIKE '{0}'" , restrictions [ 1 ] ) ;
670+ if ( restrictions . Length >= 3 && restrictions [ 2 ] != null )
671+ sql . AppendFormat ( CultureInfo . InvariantCulture ,
672+ " AND name LIKE '{0}'" , restrictions [ 2 ] ) ;
673+ if ( restrictions . Length >= 4 && restrictions [ 3 ] != null )
674+ sql . AppendFormat ( CultureInfo . InvariantCulture ,
675+ " AND type LIKE '{0}'" , restrictions [ 3 ] ) ;
676+ }
677+
678+ MySqlCommand cmd = new MySqlCommand ( sql . ToString ( ) , connection ) ;
679+ using ( MySqlDataReader reader = cmd . ExecuteReader ( ) )
680+ {
681+ while ( reader . Read ( ) )
682+ {
683+ MySqlSchemaRow row = dt . AddRow ( ) ;
684+ row [ "SPECIFIC_NAME" ] = reader . GetString ( "specific_name" ) ;
685+ row [ "ROUTINE_CATALOG" ] = DBNull . Value ;
686+ row [ "ROUTINE_SCHEMA" ] = reader . GetString ( "db" ) ;
687+ row [ "ROUTINE_NAME" ] = reader . GetString ( "name" ) ;
688+ string routineType = reader . GetString ( "type" ) ;
689+ row [ "ROUTINE_TYPE" ] = routineType ;
690+ row [ "DTD_IDENTIFIER" ] = StringUtility . ToLowerInvariant ( routineType ) == "function" ?
691+ ( object ) reader . GetString ( "returns" ) : DBNull . Value ;
692+ row [ "ROUTINE_BODY" ] = "SQL" ;
693+ row [ "ROUTINE_DEFINITION" ] = reader . GetString ( "body" ) ;
694+ row [ "EXTERNAL_NAME" ] = DBNull . Value ;
695+ row [ "EXTERNAL_LANGUAGE" ] = DBNull . Value ;
696+ row [ "PARAMETER_STYLE" ] = "SQL" ;
697+ row [ "IS_DETERMINISTIC" ] = reader . GetString ( "is_deterministic" ) ;
698+ row [ "SQL_DATA_ACCESS" ] = reader . GetString ( "sql_data_access" ) ;
699+ row [ "SQL_PATH" ] = DBNull . Value ;
700+ row [ "SECURITY_TYPE" ] = reader . GetString ( "security_type" ) ;
701+ row [ "CREATED" ] = reader . GetDateTime ( "created" ) ;
702+ row [ "LAST_ALTERED" ] = reader . GetDateTime ( "modified" ) ;
703+ row [ "SQL_MODE" ] = reader . GetString ( "sql_mode" ) ;
704+ row [ "ROUTINE_COMMENT" ] = reader . GetString ( "comment" ) ;
705+ row [ "DEFINER" ] = reader . GetString ( "definer" ) ;
706+ }
651707 }
652708 }
653709
0 commit comments