@@ -653,6 +653,18 @@ impl DatabaseType {
653653 backend_for ( self ) . supports_mysql_delimiter_commands ( )
654654 }
655655
656+ pub ( crate ) fn supports_explicit_analytic_null_treatment ( self ) -> bool {
657+ backend_for ( self ) . supports_explicit_analytic_null_treatment ( )
658+ }
659+
660+ pub ( crate ) fn uses_mysql_analytic_null_treatment_rules ( self ) -> bool {
661+ backend_for ( self ) . uses_mysql_analytic_null_treatment_rules ( )
662+ }
663+
664+ pub ( crate ) fn supports_trailing_select_into_after_set_limit ( self ) -> bool {
665+ backend_for ( self ) . supports_trailing_select_into_after_set_limit ( )
666+ }
667+
656668 pub ( crate ) fn preserves_quoted_routine_lookup_spelling ( self ) -> bool {
657669 backend_for ( self ) . preserves_quoted_routine_lookup_spelling ( )
658670 }
@@ -1968,6 +1980,9 @@ pub(crate) trait DbBackend: Sync {
19681980 fn advanced_settings_form_spec ( & self ) -> DbAdvancedSettingsFormSpec ;
19691981 fn sql_dialect ( & self ) -> SqlDialect ;
19701982 fn supports_mysql_delimiter_commands ( & self ) -> bool ;
1983+ fn supports_explicit_analytic_null_treatment ( & self ) -> bool ;
1984+ fn uses_mysql_analytic_null_treatment_rules ( & self ) -> bool ;
1985+ fn supports_trailing_select_into_after_set_limit ( & self ) -> bool ;
19711986 fn preserves_quoted_routine_lookup_spelling ( & self ) -> bool ;
19721987 fn backend_kind ( & self ) -> DatabaseBackendKind ;
19731988 fn cache_key ( & self ) -> u8 ;
@@ -2112,6 +2127,9 @@ struct MysqlBackend {
21122127 display_name : & ' static str ,
21132128 choice_label : & ' static str ,
21142129 cache_key : u8 ,
2130+ supports_explicit_analytic_null_treatment : bool ,
2131+ uses_mysql_analytic_null_treatment_rules : bool ,
2132+ supports_trailing_select_into_after_set_limit : bool ,
21152133 session_time_zone_in_range : fn ( SessionTimeZoneOffset ) -> bool ,
21162134 session_time_zone_error_message : & ' static str ,
21172135}
@@ -2145,6 +2163,9 @@ static MYSQL_BACKEND: MysqlBackend = MysqlBackend {
21452163 display_name : "MySQL" ,
21462164 choice_label : "MySQL" ,
21472165 cache_key : 1 ,
2166+ supports_explicit_analytic_null_treatment : true ,
2167+ uses_mysql_analytic_null_treatment_rules : true ,
2168+ supports_trailing_select_into_after_set_limit : true ,
21482169 session_time_zone_in_range : mysql_session_time_zone_in_range,
21492170 session_time_zone_error_message :
21502171 "MySQL session time zone must be blank or an offset from -13:59 through +14:00" ,
@@ -2154,6 +2175,9 @@ static MARIADB_BACKEND: MysqlBackend = MysqlBackend {
21542175 display_name : "MariaDB" ,
21552176 choice_label : "MariaDB" ,
21562177 cache_key : 2 ,
2178+ supports_explicit_analytic_null_treatment : false ,
2179+ uses_mysql_analytic_null_treatment_rules : false ,
2180+ supports_trailing_select_into_after_set_limit : false ,
21572181 session_time_zone_in_range : mariadb_session_time_zone_in_range,
21582182 session_time_zone_error_message :
21592183 "MariaDB session time zone must be blank or an offset from -12:59 through +13:00" ,
@@ -2235,6 +2259,18 @@ impl DbBackend for OracleBackend {
22352259 false
22362260 }
22372261
2262+ fn supports_explicit_analytic_null_treatment ( & self ) -> bool {
2263+ true
2264+ }
2265+
2266+ fn uses_mysql_analytic_null_treatment_rules ( & self ) -> bool {
2267+ false
2268+ }
2269+
2270+ fn supports_trailing_select_into_after_set_limit ( & self ) -> bool {
2271+ false
2272+ }
2273+
22382274 fn preserves_quoted_routine_lookup_spelling ( & self ) -> bool {
22392275 true
22402276 }
@@ -2692,6 +2728,18 @@ impl DbBackend for MysqlBackend {
26922728 true
26932729 }
26942730
2731+ fn supports_explicit_analytic_null_treatment ( & self ) -> bool {
2732+ self . supports_explicit_analytic_null_treatment
2733+ }
2734+
2735+ fn uses_mysql_analytic_null_treatment_rules ( & self ) -> bool {
2736+ self . uses_mysql_analytic_null_treatment_rules
2737+ }
2738+
2739+ fn supports_trailing_select_into_after_set_limit ( & self ) -> bool {
2740+ self . supports_trailing_select_into_after_set_limit
2741+ }
2742+
26952743 fn preserves_quoted_routine_lookup_spelling ( & self ) -> bool {
26962744 false
26972745 }
@@ -6452,6 +6500,9 @@ mod tests {
64526500 DatabaseType :: from_cache_key( DatabaseType :: Oracle . cache_key( ) ) ,
64536501 DatabaseType :: Oracle
64546502 ) ;
6503+ assert ! ( DatabaseType :: Oracle . supports_explicit_analytic_null_treatment( ) ) ;
6504+ assert ! ( !DatabaseType :: Oracle . uses_mysql_analytic_null_treatment_rules( ) ) ;
6505+ assert ! ( !DatabaseType :: Oracle . supports_trailing_select_into_after_set_limit( ) ) ;
64556506
64566507 assert_eq ! ( DatabaseType :: MySQL . sql_dialect( ) , SqlDialect :: MySql ) ;
64576508 assert_eq ! (
@@ -6462,6 +6513,9 @@ mod tests {
64626513 DatabaseType :: from_cache_key( DatabaseType :: MySQL . cache_key( ) ) ,
64636514 DatabaseType :: MySQL
64646515 ) ;
6516+ assert ! ( DatabaseType :: MySQL . supports_explicit_analytic_null_treatment( ) ) ;
6517+ assert ! ( DatabaseType :: MySQL . uses_mysql_analytic_null_treatment_rules( ) ) ;
6518+ assert ! ( DatabaseType :: MySQL . supports_trailing_select_into_after_set_limit( ) ) ;
64656519
64666520 assert_eq ! ( DatabaseType :: MariaDB . sql_dialect( ) , SqlDialect :: MySql ) ;
64676521 assert_eq ! (
@@ -6473,6 +6527,9 @@ mod tests {
64736527 DatabaseType :: MariaDB
64746528 ) ;
64756529 assert_eq ! ( DatabaseType :: MariaDB . choice_label( ) , "MariaDB" ) ;
6530+ assert ! ( !DatabaseType :: MariaDB . supports_explicit_analytic_null_treatment( ) ) ;
6531+ assert ! ( !DatabaseType :: MariaDB . uses_mysql_analytic_null_treatment_rules( ) ) ;
6532+ assert ! ( !DatabaseType :: MariaDB . supports_trailing_select_into_after_set_limit( ) ) ;
64766533 }
64776534
64786535 #[ test]
0 commit comments