@@ -663,6 +663,75 @@ OUT param2 VARCHAR(100))
663
663
}
664
664
}
665
665
666
+ [ Theory ]
667
+ [ InlineData ( "bit(1)" , 1 ) ]
668
+ [ InlineData ( "bit(10)" , 10 ) ]
669
+ #if ! BASELINE
670
+ [ InlineData ( "bool" , 1 ) ]
671
+ [ InlineData ( "tinyint(1)" , 1 ) ]
672
+ #endif
673
+ [ InlineData ( "char(30)" , 30 ) ]
674
+ [ InlineData ( "mediumtext" , 0 ) ]
675
+ [ InlineData ( "varchar(50)" , 50 ) ]
676
+ // These return nonzero sizes for some versions of MySQL Server 8.0
677
+ // [InlineData("bit", 0)]
678
+ // [InlineData("tinyint", 0)]
679
+ // [InlineData("bigint", 0)]
680
+ // [InlineData("bigint unsigned", 0)]
681
+ public void DeriveParametersParameterSize ( string parameterType , int expectedSize )
682
+ {
683
+ var csb = AppConfig . CreateConnectionStringBuilder ( ) ;
684
+ csb . Pooling = false ;
685
+ using var connection = new MySqlConnection ( csb . ConnectionString ) ;
686
+ connection . Open ( ) ;
687
+
688
+ using ( var cmd = new MySqlCommand ( $ "drop procedure if exists parameter_size; create procedure parameter_size(in param1 { parameterType } ) begin end;", connection ) )
689
+ cmd . ExecuteNonQuery ( ) ;
690
+
691
+ using ( var cmd = new MySqlCommand ( "parameter_size" , connection ) )
692
+ {
693
+ cmd . CommandType = CommandType . StoredProcedure ;
694
+ MySqlCommandBuilder . DeriveParameters ( cmd ) ;
695
+ var parameter = ( MySqlParameter ) Assert . Single ( cmd . Parameters ) ;
696
+ Assert . Equal ( expectedSize , parameter . Size ) ;
697
+ }
698
+ }
699
+
700
+ [ Theory ]
701
+ [ InlineData ( "bit" , MySqlDbType . Bit ) ]
702
+ [ InlineData ( "bit(1)" , MySqlDbType . Bit ) ]
703
+ #if BASELINE
704
+ [ InlineData ( "bool" , MySqlDbType . Byte ) ]
705
+ [ InlineData ( "tinyint(1)" , MySqlDbType . Byte ) ]
706
+ #else
707
+ [ InlineData ( "bool" , MySqlDbType . Bool ) ]
708
+ [ InlineData ( "tinyint(1)" , MySqlDbType . Bool ) ]
709
+ #endif
710
+ [ InlineData ( "tinyint" , MySqlDbType . Byte ) ]
711
+ [ InlineData ( "bigint" , MySqlDbType . Int64 ) ]
712
+ [ InlineData ( "bigint unsigned" , MySqlDbType . UInt64 ) ]
713
+ [ InlineData ( "char(30)" , MySqlDbType . String ) ]
714
+ [ InlineData ( "mediumtext" , MySqlDbType . MediumText ) ]
715
+ [ InlineData ( "varchar(50)" , MySqlDbType . VarChar ) ]
716
+ public void DeriveParametersParameterType ( string parameterType , MySqlDbType expectedType )
717
+ {
718
+ var csb = AppConfig . CreateConnectionStringBuilder ( ) ;
719
+ csb . Pooling = false ;
720
+ using var connection = new MySqlConnection ( csb . ConnectionString ) ;
721
+ connection . Open ( ) ;
722
+
723
+ using ( var cmd = new MySqlCommand ( $ "drop procedure if exists parameter_size; create procedure parameter_size(in param1 { parameterType } ) begin end;", connection ) )
724
+ cmd . ExecuteNonQuery ( ) ;
725
+
726
+ using ( var cmd = new MySqlCommand ( "parameter_size" , connection ) )
727
+ {
728
+ cmd . CommandType = CommandType . StoredProcedure ;
729
+ MySqlCommandBuilder . DeriveParameters ( cmd ) ;
730
+ var parameter = ( MySqlParameter ) Assert . Single ( cmd . Parameters ) ;
731
+ Assert . Equal ( expectedType , parameter . MySqlDbType ) ;
732
+ }
733
+ }
734
+
666
735
[ SkippableFact ( ServerFeatures . Json , Baseline = "https://bugs.mysql.com/bug.php?id=89335" ) ]
667
736
public void DeriveParametersSetJson ( )
668
737
{
0 commit comments