From e47f4c87c400170ebf7aa436817a279e404b08c5 Mon Sep 17 00:00:00 2001 From: Pavan Kumar Sunkara Date: Sat, 7 Nov 2020 14:24:26 +0100 Subject: [PATCH] Moved error ui to trybuild tests --- .gitignore | 2 +- Cargo.toml | 3 +- diesel_compile_tests/Cargo.toml | 4 +- .../compile-fail/must_use_query_methods.rs | 36 -- ...pdate_cannot_be_mixed_with_some_clauses.rs | 46 --- diesel_compile_tests/tests/compile_tests.rs | 32 -- ...ression_requires_column_from_same_table.rs | 9 - ...ion_requires_column_from_same_table.stderr | 119 ++++++ ..._selectable_if_inner_expr_is_selectable.rs | 5 +- ...ectable_if_inner_expr_is_selectable.stderr | 15 + .../array_expressions_must_be_correct_type.rs | 11 +- ...ay_expressions_must_be_correct_type.stderr | 100 +++++ .../array_expressions_must_be_same_type.rs | 18 - ...array_expressions_must_be_same_type.stderr | 243 ++++++++++++ .../array_only_usable_with_pg.rs | 7 +- .../fail/array_only_usable_with_pg.stderr | 45 +++ .../as_changeset_bad_column_name.rs | 2 + .../as_changeset_bad_column_name.stderr | 17 - .../as_changeset_bad_column_name_syntax.rs | 2 + ...as_changeset_bad_column_name_syntax.stderr | 17 - .../{ui => fail}/as_changeset_bad_options.rs | 0 .../as_changeset_bad_options.stderr | 3 - .../as_changeset_bad_primary_key_syntax.rs | 0 ...as_changeset_bad_primary_key_syntax.stderr | 4 - .../as_changeset_deprecated_column_name.rs | 5 +- ...as_changeset_deprecated_column_name.stderr | 7 +- ...ngeset_missing_column_name_tuple_struct.rs | 2 + ...et_missing_column_name_tuple_struct.stderr | 17 - .../as_changeset_missing_table_import.rs | 0 .../as_changeset_missing_table_import.stderr | 4 - .../as_changeset_on_non_struct.rs | 2 + .../fail/as_changeset_on_non_struct.stderr | 7 + ..._changeset_struct_with_only_primary_key.rs | 2 + ...ngeset_struct_with_only_primary_key.stderr | 17 - .../as_expression_bad_sql_type.rs | 1 - .../as_expression_bad_sql_type.stderr | 19 +- .../belongs_to_incorrect_lifetime_syntax.rs | 4 +- ...elongs_to_incorrect_lifetime_syntax.stderr | 4 - .../belongs_to_invalid_option_syntax.rs | 0 .../belongs_to_invalid_option_syntax.stderr | 3 - .../belongs_to_missing_foreign_key_column.rs | 0 ...longs_to_missing_foreign_key_column.stderr | 5 - .../belongs_to_missing_foreign_key_field.rs | 0 ...elongs_to_missing_foreign_key_field.stderr | 3 - .../belongs_to_missing_parent_import.rs | 0 .../belongs_to_missing_parent_import.stderr | 4 - .../{ui => fail}/belongs_to_second_parent.rs | 5 +- .../belongs_to_second_parent.stderr | 7 +- .../boxed_queries_and_group_by.rs | 13 - .../fail/boxed_queries_and_group_by.stderr | 89 +++++ ...ies_must_be_used_with_proper_connection.rs | 4 +- ...must_be_used_with_proper_connection.stderr | 7 + ...equire_selectable_expression_for_filter.rs | 2 - ...re_selectable_expression_for_filter.stderr | 12 + ...require_selectable_expression_for_order.rs | 4 +- ...ire_selectable_expression_for_order.stderr | 11 + .../cannot_join_to_non_joinable_table.rs | 4 - .../cannot_join_to_non_joinable_table.stderr | 40 ++ ...annot_load_default_select_with_group_by.rs | 3 - ...t_load_default_select_with_group_by.stderr | 10 + ...mix_aggregate_and_non_aggregate_selects.rs | 4 - ...aggregate_and_non_aggregate_selects.stderr | 36 ++ .../cannot_pass_aggregate_to_where.rs | 4 +- .../cannot_pass_aggregate_to_where.stderr | 10 + ...t_with_methods_other_than_filter_called.rs | 5 - ...th_methods_other_than_filter_called.stderr | 41 ++ ...cannot_use_expression_methods_on_tuples.rs | 4 +- ...ot_use_expression_methods_on_tuples.stderr | 27 ++ ...s_method_on_structs_without_primary_key.rs | 3 +- ...thod_on_structs_without_primary_key.stderr | 36 ++ .../columns_cannot_be_rhs_of_insert.rs | 6 +- .../columns_cannot_be_rhs_of_insert.stderr | 12 + .../combinations_require_same_sql_types.rs | 1 - ...combinations_require_same_sql_types.stderr | 12 +- .../custom_returning_requires_nonaggregate.rs | 4 +- ...tom_returning_requires_nonaggregate.stderr | 22 ++ ...eturning_requires_selectable_expression.rs | 5 +- ...ning_requires_selectable_expression.stderr | 41 ++ ...not_support_returning_methods_on_sqlite.rs | 3 - ...support_returning_methods_on_sqlite.stderr | 19 + ...distinct_on_allows_only_fields_of_table.rs | 4 - ...inct_on_allows_only_fields_of_table.stderr | 41 ++ ...istinct_on_clause_only_supported_for_pg.rs | 3 - ...nct_on_clause_only_supported_for_pg.stderr | 15 + .../embed_and_serialize_as_cannot_be_mixed.rs | 7 +- ...ed_and_serialize_as_cannot_be_mixed.stderr | 5 +- .../exists_can_only_take_subselects.rs | 4 +- .../exists_can_only_take_subselects.stderr | 22 ++ ...or_equality_to_expressions_of_same_type.rs | 3 - ...quality_to_expressions_of_same_type.stderr | 16 + ...mparison_for_columns_from_another_table.rs | 7 +- ...ison_for_columns_from_another_table.stderr | 65 +++ ...r_requires_bool_nonaggregate_expression.rs | 3 - ...quires_bool_nonaggregate_expression.stderr | 18 + .../find_requires_correct_type.rs | 5 - .../fail/find_requires_correct_type.stderr | 51 +++ .../identifiable_missing_pk_field.rs | 6 +- .../identifiable_missing_pk_field.stderr | 23 +- .../ilike_only_compiles_for_pg.rs | 4 +- .../fail/ilike_only_compiles_for_pg.stderr | 11 + ...nnot_reference_columns_from_other_table.rs | 4 - ..._reference_columns_from_other_table.stderr | 25 ++ ...lect_cant_be_used_with_tuples_or_arrays.rs | 7 +- ..._cant_be_used_with_tuples_or_arrays.stderr | 18 + ..._from_select_requires_valid_column_list.rs | 13 +- ...m_select_requires_valid_column_list.stderr | 66 ++++ ...ut_where_clause_not_supported_on_sqlite.rs | 0 ...here_clause_not_supported_on_sqlite.stderr | 4 - ...t_requires_value_of_same_type_as_column.rs | 4 +- ...quires_value_of_same_type_as_column.stderr | 13 + ...not_support_returning_methods_on_sqlite.rs | 8 +- ...support_returning_methods_on_sqlite.stderr | 19 + .../{ui => fail}/insertable_empty_struct.rs | 0 .../insertable_empty_struct.stderr | 3 - .../insertable_missing_table_or_column.rs | 0 .../insertable_missing_table_or_column.stderr | 5 - ...it_on_requires_valid_boolean_expression.rs | 4 +- ...n_requires_valid_boolean_expression.stderr | 24 ++ .../tests/fail/must_use_query_methods.rs | 35 ++ .../tests/fail/must_use_query_methods.stderr | 100 +++++ ...l_does_not_support_offset_without_limit.rs | 2 - ...es_not_support_offset_without_limit.stderr | 12 +- .../numeric_ops_require_numeric_column.rs | 2 - .../numeric_ops_require_numeric_column.stderr | 9 + .../order_requires_column_from_same_table.rs | 2 - ...der_requires_column_from_same_table.stderr | 10 + .../ordering_functions_require_ord.rs | 7 +- .../ordering_functions_require_ord.stderr | 45 +++ ...conflict_requires_valid_conflict_target.rs | 6 +- ...lict_requires_valid_conflict_target.stderr | 21 + ...ressions_cant_be_used_in_a_sqlite_query.rs | 6 +- ...ions_cant_be_used_in_a_sqlite_query.stderr | 45 +++ ..._upsert_do_update_requires_valid_update.rs | 7 +- ...ert_do_update_requires_valid_update.stderr | 54 +++ ...uires_table_name_or_sql_type_annotation.rs | 3 +- ...s_table_name_or_sql_type_annotation.stderr | 27 +- .../{ui => fail}/queryable_type_missmatch.rs | 9 +- .../queryable_type_missmatch.stderr | 4 - .../returning_cannot_be_called_twice.rs | 5 +- .../returning_cannot_be_called_twice.stderr | 17 + ...g_clause_requires_selectable_expression.rs | 4 - ...ause_requires_selectable_expression.stderr | 40 ++ ...ght_side_of_left_join_requires_nullable.rs | 27 +- ...side_of_left_join_requires_nullable.stderr | 372 ++++++++++++++++++ ...select_carries_correct_result_type_info.rs | 3 - ...ct_carries_correct_result_type_info.stderr | 30 ++ ...pdate_cannot_be_mixed_with_some_clauses.rs | 24 ++ ...e_cannot_be_mixed_with_some_clauses.stderr | 194 +++++++++ ...ect_for_update_cannot_be_used_on_sqlite.rs | 3 - ...for_update_cannot_be_used_on_sqlite.stderr | 25 ++ ...update_no_wait_cannot_be_used_on_sqlite.rs | 3 - ...te_no_wait_cannot_be_used_on_sqlite.stderr | 25 ++ ...te_skip_locked_cannot_be_used_on_sqlite.rs | 3 - ...kip_locked_cannot_be_used_on_sqlite.stderr | 25 ++ .../select_requires_column_from_same_table.rs | 2 - ...ect_requires_column_from_same_table.stderr | 13 + .../select_requires_valid_grouping.rs | 9 +- .../select_requires_valid_grouping.stderr | 80 ++++ .../select_sql_still_ensures_result_type.rs | 2 - ...elect_sql_still_ensures_result_type.stderr | 16 + ...uires_all_must_be_from_selectable_table.rs | 6 - ...s_all_must_be_from_selectable_table.stderr | 70 ++++ .../{ui => fail}/sql_type_bad_options.rs | 0 .../{ui => fail}/sql_type_bad_options.stderr | 3 - ...e_insert_or_ignore_cannot_be_used_on_pg.rs | 3 +- ...sert_or_ignore_cannot_be_used_on_pg.stderr | 11 + .../sqlite_upsert_cannot_be_used_on_pg.rs | 3 +- .../sqlite_upsert_cannot_be_used_on_pg.stderr | 11 + ...ubselect_cannot_reference_random_tables.rs | 4 - ...lect_cannot_reference_random_tables.stderr | 53 +++ .../subselect_requires_correct_type.rs | 3 +- .../subselect_requires_correct_type.stderr | 8 + .../table_column_names.rs | 0 .../tests/fail/table_column_names.stderr | 15 + .../table_invalid_syntax_1.rs | 0 .../tests/fail/table_invalid_syntax_1.stderr | 9 + .../table_invalid_syntax_2.rs | 0 .../tests/fail/table_invalid_syntax_2.stderr | 9 + ...date_requires_column_be_from_same_table.rs | 3 - ..._requires_column_be_from_same_table.stderr | 16 + ...requires_left_side_of_eq_to_be_a_column.rs | 2 - ...ires_left_side_of_eq_to_be_a_column.stderr | 7 + .../update_requires_set.rs | 3 +- .../tests/fail/update_requires_set.stderr | 8 + .../update_requires_valid_where_clause.rs | 6 +- .../update_requires_valid_where_clause.stderr | 48 +++ ...not_support_returning_methods_on_sqlite.rs | 3 - ...support_returning_methods_on_sqlite.stderr | 19 + ...multiple_values_not_supported_on_sqlite.rs | 0 ...iple_values_not_supported_on_sqlite.stderr | 4 - ...d_functions_follow_same_selection_rules.rs | 4 +- ...nctions_follow_same_selection_rules.stderr | 23 ++ .../valid_grouping_and_boxed_expressions.rs | 5 - ...alid_grouping_and_boxed_expressions.stderr | 67 ++++ diesel_compile_tests/tests/trybuild.rs | 7 + .../ui/as_changeset_on_non_struct.stderr | 23 -- .../tests/ui/update-references.sh | 48 --- 197 files changed, 3026 insertions(+), 688 deletions(-) delete mode 100644 diesel_compile_tests/tests/compile-fail/must_use_query_methods.rs delete mode 100644 diesel_compile_tests/tests/compile-fail/select_for_update_cannot_be_mixed_with_some_clauses.rs delete mode 100644 diesel_compile_tests/tests/compile_tests.rs rename diesel_compile_tests/tests/{compile-fail => fail}/aggregate_expression_requires_column_from_same_table.rs (62%) create mode 100644 diesel_compile_tests/tests/fail/aggregate_expression_requires_column_from_same_table.stderr rename diesel_compile_tests/tests/{compile-fail => fail}/any_is_only_selectable_if_inner_expr_is_selectable.rs (85%) create mode 100644 diesel_compile_tests/tests/fail/any_is_only_selectable_if_inner_expr_is_selectable.stderr rename diesel_compile_tests/tests/{compile-fail => fail}/array_expressions_must_be_correct_type.rs (64%) create mode 100644 diesel_compile_tests/tests/fail/array_expressions_must_be_correct_type.stderr rename diesel_compile_tests/tests/{compile-fail => fail}/array_expressions_must_be_same_type.rs (55%) create mode 100644 diesel_compile_tests/tests/fail/array_expressions_must_be_same_type.stderr rename diesel_compile_tests/tests/{compile-fail => fail}/array_only_usable_with_pg.rs (76%) create mode 100644 diesel_compile_tests/tests/fail/array_only_usable_with_pg.stderr rename diesel_compile_tests/tests/{ui => fail}/as_changeset_bad_column_name.rs (95%) rename diesel_compile_tests/tests/{ui => fail}/as_changeset_bad_column_name.stderr (73%) rename diesel_compile_tests/tests/{ui => fail}/as_changeset_bad_column_name_syntax.rs (93%) rename diesel_compile_tests/tests/{ui => fail}/as_changeset_bad_column_name_syntax.stderr (51%) rename diesel_compile_tests/tests/{ui => fail}/as_changeset_bad_options.rs (100%) rename diesel_compile_tests/tests/{ui => fail}/as_changeset_bad_options.stderr (96%) rename diesel_compile_tests/tests/{ui => fail}/as_changeset_bad_primary_key_syntax.rs (100%) rename diesel_compile_tests/tests/{ui => fail}/as_changeset_bad_primary_key_syntax.stderr (86%) rename diesel_compile_tests/tests/{ui => fail}/as_changeset_deprecated_column_name.rs (67%) rename diesel_compile_tests/tests/{ui => fail}/as_changeset_deprecated_column_name.stderr (73%) rename diesel_compile_tests/tests/{ui => fail}/as_changeset_missing_column_name_tuple_struct.rs (94%) rename diesel_compile_tests/tests/{ui => fail}/as_changeset_missing_column_name_tuple_struct.stderr (69%) rename diesel_compile_tests/tests/{ui => fail}/as_changeset_missing_table_import.rs (100%) rename diesel_compile_tests/tests/{ui => fail}/as_changeset_missing_table_import.stderr (85%) rename diesel_compile_tests/tests/{ui => fail}/as_changeset_on_non_struct.rs (93%) create mode 100644 diesel_compile_tests/tests/fail/as_changeset_on_non_struct.stderr rename diesel_compile_tests/tests/{ui => fail}/as_changeset_struct_with_only_primary_key.rs (95%) rename diesel_compile_tests/tests/{ui => fail}/as_changeset_struct_with_only_primary_key.stderr (62%) rename diesel_compile_tests/tests/{ui => fail}/as_expression_bad_sql_type.rs (93%) rename diesel_compile_tests/tests/{ui => fail}/as_expression_bad_sql_type.stderr (62%) rename diesel_compile_tests/tests/{ui => fail}/belongs_to_incorrect_lifetime_syntax.rs (91%) rename diesel_compile_tests/tests/{ui => fail}/belongs_to_incorrect_lifetime_syntax.stderr (73%) rename diesel_compile_tests/tests/{ui => fail}/belongs_to_invalid_option_syntax.rs (100%) rename diesel_compile_tests/tests/{ui => fail}/belongs_to_invalid_option_syntax.stderr (96%) rename diesel_compile_tests/tests/{ui => fail}/belongs_to_missing_foreign_key_column.rs (100%) rename diesel_compile_tests/tests/{ui => fail}/belongs_to_missing_foreign_key_column.stderr (92%) rename diesel_compile_tests/tests/{ui => fail}/belongs_to_missing_foreign_key_field.rs (100%) rename diesel_compile_tests/tests/{ui => fail}/belongs_to_missing_foreign_key_field.stderr (95%) rename diesel_compile_tests/tests/{ui => fail}/belongs_to_missing_parent_import.rs (100%) rename diesel_compile_tests/tests/{ui => fail}/belongs_to_missing_parent_import.stderr (62%) rename diesel_compile_tests/tests/{ui => fail}/belongs_to_second_parent.rs (78%) rename diesel_compile_tests/tests/{ui => fail}/belongs_to_second_parent.stderr (61%) rename diesel_compile_tests/tests/{compile-fail => fail}/boxed_queries_and_group_by.rs (84%) create mode 100644 diesel_compile_tests/tests/fail/boxed_queries_and_group_by.stderr rename diesel_compile_tests/tests/{compile-fail => fail}/boxed_queries_must_be_used_with_proper_connection.rs (85%) create mode 100644 diesel_compile_tests/tests/fail/boxed_queries_must_be_used_with_proper_connection.stderr rename diesel_compile_tests/tests/{compile-fail => fail}/boxed_queries_require_selectable_expression_for_filter.rs (86%) create mode 100644 diesel_compile_tests/tests/fail/boxed_queries_require_selectable_expression_for_filter.stderr rename diesel_compile_tests/tests/{compile-fail => fail}/boxed_queries_require_selectable_expression_for_order.rs (85%) create mode 100644 diesel_compile_tests/tests/fail/boxed_queries_require_selectable_expression_for_order.stderr rename diesel_compile_tests/tests/{compile-fail => fail}/cannot_join_to_non_joinable_table.rs (90%) create mode 100644 diesel_compile_tests/tests/fail/cannot_join_to_non_joinable_table.stderr rename diesel_compile_tests/tests/{compile-fail => fail}/cannot_load_default_select_with_group_by.rs (79%) create mode 100644 diesel_compile_tests/tests/fail/cannot_load_default_select_with_group_by.stderr rename diesel_compile_tests/tests/{compile-fail => fail}/cannot_mix_aggregate_and_non_aggregate_selects.rs (84%) create mode 100644 diesel_compile_tests/tests/fail/cannot_mix_aggregate_and_non_aggregate_selects.stderr rename diesel_compile_tests/tests/{compile-fail => fail}/cannot_pass_aggregate_to_where.rs (82%) create mode 100644 diesel_compile_tests/tests/fail/cannot_pass_aggregate_to_where.stderr rename diesel_compile_tests/tests/{compile-fail => fail}/cannot_update_target_with_methods_other_than_filter_called.rs (73%) create mode 100644 diesel_compile_tests/tests/fail/cannot_update_target_with_methods_other_than_filter_called.stderr rename diesel_compile_tests/tests/{compile-fail => fail}/cannot_use_expression_methods_on_tuples.rs (74%) create mode 100644 diesel_compile_tests/tests/fail/cannot_use_expression_methods_on_tuples.stderr rename diesel_compile_tests/tests/{compile-fail => fail}/codegen_does_not_add_save_changes_method_on_structs_without_primary_key.rs (84%) create mode 100644 diesel_compile_tests/tests/fail/codegen_does_not_add_save_changes_method_on_structs_without_primary_key.stderr rename diesel_compile_tests/tests/{compile-fail => fail}/columns_cannot_be_rhs_of_insert.rs (82%) create mode 100644 diesel_compile_tests/tests/fail/columns_cannot_be_rhs_of_insert.stderr rename diesel_compile_tests/tests/{ui => fail}/combinations_require_same_sql_types.rs (97%) rename diesel_compile_tests/tests/{ui => fail}/combinations_require_same_sql_types.stderr (73%) rename diesel_compile_tests/tests/{compile-fail => fail}/custom_returning_requires_nonaggregate.rs (83%) create mode 100644 diesel_compile_tests/tests/fail/custom_returning_requires_nonaggregate.stderr rename diesel_compile_tests/tests/{compile-fail => fail}/custom_returning_requires_selectable_expression.rs (79%) create mode 100644 diesel_compile_tests/tests/fail/custom_returning_requires_selectable_expression.stderr rename diesel_compile_tests/tests/{compile-fail => fail}/delete_statement_does_not_support_returning_methods_on_sqlite.rs (81%) create mode 100644 diesel_compile_tests/tests/fail/delete_statement_does_not_support_returning_methods_on_sqlite.stderr rename diesel_compile_tests/tests/{compile-fail => fail}/distinct_on_allows_only_fields_of_table.rs (79%) create mode 100644 diesel_compile_tests/tests/fail/distinct_on_allows_only_fields_of_table.stderr rename diesel_compile_tests/tests/{compile-fail => fail}/distinct_on_clause_only_supported_for_pg.rs (82%) create mode 100644 diesel_compile_tests/tests/fail/distinct_on_clause_only_supported_for_pg.stderr rename diesel_compile_tests/tests/{ui => fail}/embed_and_serialize_as_cannot_be_mixed.rs (74%) rename diesel_compile_tests/tests/{ui => fail}/embed_and_serialize_as_cannot_be_mixed.stderr (55%) rename diesel_compile_tests/tests/{compile-fail => fail}/exists_can_only_take_subselects.rs (83%) create mode 100644 diesel_compile_tests/tests/fail/exists_can_only_take_subselects.stderr rename diesel_compile_tests/tests/{compile-fail => fail}/expressions_can_only_be_compared_for_equality_to_expressions_of_same_type.rs (77%) create mode 100644 diesel_compile_tests/tests/fail/expressions_can_only_be_compared_for_equality_to_expressions_of_same_type.stderr rename diesel_compile_tests/tests/{compile-fail => fail}/filter_cannot_take_comparison_for_columns_from_another_table.rs (77%) create mode 100644 diesel_compile_tests/tests/fail/filter_cannot_take_comparison_for_columns_from_another_table.stderr rename diesel_compile_tests/tests/{compile-fail => fail}/filter_requires_bool_nonaggregate_expression.rs (62%) create mode 100644 diesel_compile_tests/tests/fail/filter_requires_bool_nonaggregate_expression.stderr rename diesel_compile_tests/tests/{compile-fail => fail}/find_requires_correct_type.rs (80%) create mode 100644 diesel_compile_tests/tests/fail/find_requires_correct_type.stderr rename diesel_compile_tests/tests/{ui => fail}/identifiable_missing_pk_field.rs (95%) rename diesel_compile_tests/tests/{ui => fail}/identifiable_missing_pk_field.stderr (62%) rename diesel_compile_tests/tests/{compile-fail => fail}/ilike_only_compiles_for_pg.rs (86%) create mode 100644 diesel_compile_tests/tests/fail/ilike_only_compiles_for_pg.stderr rename diesel_compile_tests/tests/{compile-fail => fail}/insert_cannot_reference_columns_from_other_table.rs (63%) create mode 100644 diesel_compile_tests/tests/fail/insert_cannot_reference_columns_from_other_table.stderr rename diesel_compile_tests/tests/{compile-fail => fail}/insert_from_select_cant_be_used_with_tuples_or_arrays.rs (84%) create mode 100644 diesel_compile_tests/tests/fail/insert_from_select_cant_be_used_with_tuples_or_arrays.stderr rename diesel_compile_tests/tests/{compile-fail => fail}/insert_from_select_requires_valid_column_list.rs (86%) create mode 100644 diesel_compile_tests/tests/fail/insert_from_select_requires_valid_column_list.stderr rename diesel_compile_tests/tests/{ui => fail}/insert_from_select_with_on_conflict_without_where_clause_not_supported_on_sqlite.rs (100%) rename diesel_compile_tests/tests/{ui => fail}/insert_from_select_with_on_conflict_without_where_clause_not_supported_on_sqlite.stderr (76%) rename diesel_compile_tests/tests/{compile-fail => fail}/insert_requires_value_of_same_type_as_column.rs (82%) create mode 100644 diesel_compile_tests/tests/fail/insert_requires_value_of_same_type_as_column.stderr rename diesel_compile_tests/tests/{compile-fail => fail}/insert_statement_does_not_support_returning_methods_on_sqlite.rs (80%) create mode 100644 diesel_compile_tests/tests/fail/insert_statement_does_not_support_returning_methods_on_sqlite.stderr rename diesel_compile_tests/tests/{ui => fail}/insertable_empty_struct.rs (100%) rename diesel_compile_tests/tests/{ui => fail}/insertable_empty_struct.stderr (89%) rename diesel_compile_tests/tests/{ui => fail}/insertable_missing_table_or_column.rs (100%) rename diesel_compile_tests/tests/{ui => fail}/insertable_missing_table_or_column.stderr (90%) rename diesel_compile_tests/tests/{compile-fail => fail}/join_with_explicit_on_requires_valid_boolean_expression.rs (80%) create mode 100644 diesel_compile_tests/tests/fail/join_with_explicit_on_requires_valid_boolean_expression.stderr create mode 100644 diesel_compile_tests/tests/fail/must_use_query_methods.rs create mode 100644 diesel_compile_tests/tests/fail/must_use_query_methods.stderr rename diesel_compile_tests/tests/{ui => fail}/mysql_does_not_support_offset_without_limit.rs (91%) rename diesel_compile_tests/tests/{ui => fail}/mysql_does_not_support_offset_without_limit.stderr (93%) rename diesel_compile_tests/tests/{compile-fail => fail}/numeric_ops_require_numeric_column.rs (69%) create mode 100644 diesel_compile_tests/tests/fail/numeric_ops_require_numeric_column.stderr rename diesel_compile_tests/tests/{compile-fail => fail}/order_requires_column_from_same_table.rs (85%) create mode 100644 diesel_compile_tests/tests/fail/order_requires_column_from_same_table.stderr rename diesel_compile_tests/tests/{compile-fail => fail}/ordering_functions_require_ord.rs (70%) create mode 100644 diesel_compile_tests/tests/fail/ordering_functions_require_ord.stderr rename diesel_compile_tests/tests/{compile-fail => fail}/pg_on_conflict_requires_valid_conflict_target.rs (74%) create mode 100644 diesel_compile_tests/tests/fail/pg_on_conflict_requires_valid_conflict_target.stderr rename diesel_compile_tests/tests/{compile-fail => fail}/pg_specific_expressions_cant_be_used_in_a_sqlite_query.rs (68%) create mode 100644 diesel_compile_tests/tests/fail/pg_specific_expressions_cant_be_used_in_a_sqlite_query.stderr rename diesel_compile_tests/tests/{compile-fail => fail}/pg_upsert_do_update_requires_valid_update.rs (86%) create mode 100644 diesel_compile_tests/tests/fail/pg_upsert_do_update_requires_valid_update.stderr rename diesel_compile_tests/tests/{ui => fail}/queryable_by_name_requires_table_name_or_sql_type_annotation.rs (80%) rename diesel_compile_tests/tests/{ui => fail}/queryable_by_name_requires_table_name_or_sql_type_annotation.stderr (83%) rename diesel_compile_tests/tests/{ui => fail}/queryable_type_missmatch.rs (91%) rename diesel_compile_tests/tests/{ui => fail}/queryable_type_missmatch.stderr (97%) rename diesel_compile_tests/tests/{compile-fail => fail}/returning_cannot_be_called_twice.rs (79%) create mode 100644 diesel_compile_tests/tests/fail/returning_cannot_be_called_twice.stderr rename diesel_compile_tests/tests/{compile-fail => fail}/returning_clause_requires_selectable_expression.rs (85%) create mode 100644 diesel_compile_tests/tests/fail/returning_clause_requires_selectable_expression.stderr rename diesel_compile_tests/tests/{compile-fail => fail}/right_side_of_left_join_requires_nullable.rs (86%) create mode 100644 diesel_compile_tests/tests/fail/right_side_of_left_join_requires_nullable.stderr rename diesel_compile_tests/tests/{compile-fail => fail}/select_carries_correct_result_type_info.rs (62%) create mode 100644 diesel_compile_tests/tests/fail/select_carries_correct_result_type_info.stderr create mode 100644 diesel_compile_tests/tests/fail/select_for_update_cannot_be_mixed_with_some_clauses.rs create mode 100644 diesel_compile_tests/tests/fail/select_for_update_cannot_be_mixed_with_some_clauses.stderr rename diesel_compile_tests/tests/{compile-fail => fail}/select_for_update_cannot_be_used_on_sqlite.rs (81%) create mode 100644 diesel_compile_tests/tests/fail/select_for_update_cannot_be_used_on_sqlite.stderr rename diesel_compile_tests/tests/{compile-fail => fail}/select_for_update_no_wait_cannot_be_used_on_sqlite.rs (82%) create mode 100644 diesel_compile_tests/tests/fail/select_for_update_no_wait_cannot_be_used_on_sqlite.stderr rename diesel_compile_tests/tests/{compile-fail => fail}/select_for_update_skip_locked_cannot_be_used_on_sqlite.rs (82%) create mode 100644 diesel_compile_tests/tests/fail/select_for_update_skip_locked_cannot_be_used_on_sqlite.stderr rename diesel_compile_tests/tests/{compile-fail => fail}/select_requires_column_from_same_table.rs (84%) create mode 100644 diesel_compile_tests/tests/fail/select_requires_column_from_same_table.stderr rename diesel_compile_tests/tests/{compile-fail => fail}/select_requires_valid_grouping.rs (93%) create mode 100644 diesel_compile_tests/tests/fail/select_requires_valid_grouping.stderr rename diesel_compile_tests/tests/{compile-fail => fail}/select_sql_still_ensures_result_type.rs (91%) create mode 100644 diesel_compile_tests/tests/fail/select_sql_still_ensures_result_type.stderr rename diesel_compile_tests/tests/{compile-fail => fail}/selecting_multiple_columns_requires_all_must_be_from_selectable_table.rs (74%) create mode 100644 diesel_compile_tests/tests/fail/selecting_multiple_columns_requires_all_must_be_from_selectable_table.stderr rename diesel_compile_tests/tests/{ui => fail}/sql_type_bad_options.rs (100%) rename diesel_compile_tests/tests/{ui => fail}/sql_type_bad_options.stderr (95%) rename diesel_compile_tests/tests/{compile-fail => fail}/sqlite_insert_or_ignore_cannot_be_used_on_pg.rs (85%) create mode 100644 diesel_compile_tests/tests/fail/sqlite_insert_or_ignore_cannot_be_used_on_pg.stderr rename diesel_compile_tests/tests/{compile-fail => fail}/sqlite_upsert_cannot_be_used_on_pg.rs (84%) create mode 100644 diesel_compile_tests/tests/fail/sqlite_upsert_cannot_be_used_on_pg.stderr rename diesel_compile_tests/tests/{compile-fail => fail}/subselect_cannot_reference_random_tables.rs (86%) create mode 100644 diesel_compile_tests/tests/fail/subselect_cannot_reference_random_tables.stderr rename diesel_compile_tests/tests/{compile-fail => fail}/subselect_requires_correct_type.rs (86%) create mode 100644 diesel_compile_tests/tests/fail/subselect_requires_correct_type.stderr rename diesel_compile_tests/tests/{compile-fail => fail}/table_column_names.rs (100%) create mode 100644 diesel_compile_tests/tests/fail/table_column_names.stderr rename diesel_compile_tests/tests/{compile-fail => fail}/table_invalid_syntax_1.rs (100%) create mode 100644 diesel_compile_tests/tests/fail/table_invalid_syntax_1.stderr rename diesel_compile_tests/tests/{compile-fail => fail}/table_invalid_syntax_2.rs (100%) create mode 100644 diesel_compile_tests/tests/fail/table_invalid_syntax_2.stderr rename diesel_compile_tests/tests/{compile-fail => fail}/update_requires_column_be_from_same_table.rs (85%) create mode 100644 diesel_compile_tests/tests/fail/update_requires_column_be_from_same_table.stderr rename diesel_compile_tests/tests/{compile-fail => fail}/update_requires_left_side_of_eq_to_be_a_column.rs (88%) create mode 100644 diesel_compile_tests/tests/fail/update_requires_left_side_of_eq_to_be_a_column.stderr rename diesel_compile_tests/tests/{compile-fail => fail}/update_requires_set.rs (57%) create mode 100644 diesel_compile_tests/tests/fail/update_requires_set.stderr rename diesel_compile_tests/tests/{compile-fail => fail}/update_requires_valid_where_clause.rs (76%) create mode 100644 diesel_compile_tests/tests/fail/update_requires_valid_where_clause.stderr rename diesel_compile_tests/tests/{compile-fail => fail}/update_statement_does_not_support_returning_methods_on_sqlite.rs (83%) create mode 100644 diesel_compile_tests/tests/fail/update_statement_does_not_support_returning_methods_on_sqlite.stderr rename diesel_compile_tests/tests/{ui => fail}/upsert_with_multiple_values_not_supported_on_sqlite.rs (100%) rename diesel_compile_tests/tests/{ui => fail}/upsert_with_multiple_values_not_supported_on_sqlite.stderr (95%) rename diesel_compile_tests/tests/{compile-fail => fail}/user_defined_functions_follow_same_selection_rules.rs (85%) create mode 100644 diesel_compile_tests/tests/fail/user_defined_functions_follow_same_selection_rules.stderr rename diesel_compile_tests/tests/{compile-fail => fail}/valid_grouping_and_boxed_expressions.rs (94%) create mode 100644 diesel_compile_tests/tests/fail/valid_grouping_and_boxed_expressions.stderr create mode 100644 diesel_compile_tests/tests/trybuild.rs delete mode 100644 diesel_compile_tests/tests/ui/as_changeset_on_non_struct.stderr delete mode 100755 diesel_compile_tests/tests/ui/update-references.sh diff --git a/.gitignore b/.gitignore index d4da7343978e..b7273a906cc0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ target Cargo.lock !diesel_cli/Cargo.lock -.env \ No newline at end of file +.env diff --git a/Cargo.toml b/Cargo.toml index 2d7185ba4466..b23692d30cd1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,8 +3,7 @@ members = [ "diesel", "diesel_cli", "diesel_derives", - # FIXME: getting "multiple matching crates for `diesel`" because of the shared build directory - # "diesel_compile_tests", + "diesel_compile_tests", "diesel_tests", "diesel_migrations", "diesel_migrations/migrations_internals", diff --git a/diesel_compile_tests/Cargo.toml b/diesel_compile_tests/Cargo.toml index 54489cbd8a6c..bf1647bf39c1 100644 --- a/diesel_compile_tests/Cargo.toml +++ b/diesel_compile_tests/Cargo.toml @@ -3,8 +3,6 @@ name = "diesel_compile_tests" version = "0.1.0" authors = ["Sean Griffin "] -[workspace] - [dependencies] diesel = { version = "2.0.0", default-features = false, features = ["extras", "sqlite", "postgres", "mysql", "unstable"], path = "../diesel" } -compiletest_rs = "=0.4" +trybuild = "1.0.35" diff --git a/diesel_compile_tests/tests/compile-fail/must_use_query_methods.rs b/diesel_compile_tests/tests/compile-fail/must_use_query_methods.rs deleted file mode 100644 index acb14468e223..000000000000 --- a/diesel_compile_tests/tests/compile-fail/must_use_query_methods.rs +++ /dev/null @@ -1,36 +0,0 @@ -#![deny(unused_must_use)] - -#[macro_use] -extern crate diesel; - -use diesel::*; - -table! { - stuff (b) { - b -> Bool, - } -} - -fn main() { - use stuff::b; - use stuff::table as st; - - st.select(b); //~ ERROR unused `diesel::query_builder::SelectStatement` - st.select(b).distinct(); //~ ERROR unused `diesel::query_builder::SelectStatement` - st.count(); //~ ERROR unused `diesel::query_builder::SelectStatement` - st.order(b); //~ ERROR unused `diesel::query_builder::SelectStatement` - st.limit(1); //~ ERROR unused `diesel::query_builder::SelectStatement` - st.offset(1); //~ ERROR unused `diesel::query_builder::SelectStatement` - - st.filter(b.eq(true)); //~ ERROR unused `diesel::query_builder::SelectStatement` - st.filter(b.eq(true)).limit(1); //~ ERROR unused `diesel::query_builder::SelectStatement` - - insert_into(st); //~ ERROR unused - insert_into(st).values(&vec![b.eq(true), b.eq(false)]); //~ ERROR unused - - update(st).set(b.eq(true)); //~ ERROR unused - - delete(st); //~ ERROR unused - - let _thingies = st.filter(b.eq(true)); // No ERROR -} diff --git a/diesel_compile_tests/tests/compile-fail/select_for_update_cannot_be_mixed_with_some_clauses.rs b/diesel_compile_tests/tests/compile-fail/select_for_update_cannot_be_mixed_with_some_clauses.rs deleted file mode 100644 index 6a0db0b952a0..000000000000 --- a/diesel_compile_tests/tests/compile-fail/select_for_update_cannot_be_mixed_with_some_clauses.rs +++ /dev/null @@ -1,46 +0,0 @@ -#[macro_use] -extern crate diesel; - -use diesel::*; - -table! { - users { - id -> Integer, - } -} - -fn main() { - use self::users::dsl::*; - - users.for_update().distinct(); - //~^ ERROR: E0271 - //~| ERROR: E0277 - //~| ERROR: E0277 - users.distinct().for_update(); - //~^ ERROR: E0271 - //~| ERROR: E0277 - users.for_update().distinct_on(id); - //~^ ERROR: E0271 - //~| ERROR: E0277 - //~| ERROR: E0277 - //~| ERROR: E0277 - users.distinct_on(id).for_update(); - //~^ ERROR: E0271 - //~| ERROR: E0277 - - users.for_update().group_by(id); - //~^ ERROR: E0271 - //~| ERROR: E0277 - //~| ERROR: E0277 - users.group_by(id).for_update(); - //~^ ERROR: E0271 - //~| ERROR: E0277 - - users.into_boxed().for_update(); - //~^ ERROR: E0271 - //~| ERROR: E0277 - users.for_update().into_boxed(); - //~^ ERROR: E0271 - //~| ERROR: E0277 - //~| ERROR: E0277 -} diff --git a/diesel_compile_tests/tests/compile_tests.rs b/diesel_compile_tests/tests/compile_tests.rs deleted file mode 100644 index c92d899e45d6..000000000000 --- a/diesel_compile_tests/tests/compile_tests.rs +++ /dev/null @@ -1,32 +0,0 @@ -#![cfg(not(windows))] -extern crate compiletest_rs as compiletest; - -use std::env::var; -use std::path::PathBuf; - -fn run_mode(mode: &'static str) { - let mut config = compiletest::Config::default(); - - let cfg_mode = mode.parse().expect("Invalid mode"); - - if let Ok(name) = var::<&str>("TESTNAME") { - let s: String = name.to_owned(); - config.filter = Some(s) - } - config.mode = cfg_mode; - config.src_base = PathBuf::from(format!("tests/{}", mode)); - config.link_deps(); - config.clean_rmeta(); - - compiletest::run_tests(&config); -} - -#[test] -fn compile_fail() { - run_mode("compile-fail"); -} - -#[test] -fn ui() { - run_mode("ui") -} diff --git a/diesel_compile_tests/tests/compile-fail/aggregate_expression_requires_column_from_same_table.rs b/diesel_compile_tests/tests/fail/aggregate_expression_requires_column_from_same_table.rs similarity index 62% rename from diesel_compile_tests/tests/compile-fail/aggregate_expression_requires_column_from_same_table.rs rename to diesel_compile_tests/tests/fail/aggregate_expression_requires_column_from_same_table.rs index ec4f4d4ee056..44a1bb323f18 100644 --- a/diesel_compile_tests/tests/compile-fail/aggregate_expression_requires_column_from_same_table.rs +++ b/diesel_compile_tests/tests/fail/aggregate_expression_requires_column_from_same_table.rs @@ -1,4 +1,3 @@ -#[macro_use] extern crate diesel; use diesel::*; @@ -18,15 +17,7 @@ table! { fn main() { use diesel::dsl::*; let source = users::table.select(sum(posts::id)); - //~^ ERROR E0277 - //~| ERROR AppearsInFromClause let source = users::table.select(avg(posts::id)); - //~^ ERROR E0277 - //~| ERROR AppearsInFromClause let source = users::table.select(max(posts::id)); - //~^ ERROR E0277 - //~| ERROR AppearsInFromClause let source = users::table.select(min(posts::id)); - //~^ ERROR E0277 - //~| ERROR AppearsInFromClause } diff --git a/diesel_compile_tests/tests/fail/aggregate_expression_requires_column_from_same_table.stderr b/diesel_compile_tests/tests/fail/aggregate_expression_requires_column_from_same_table.stderr new file mode 100644 index 000000000000..889f373d9c59 --- /dev/null +++ b/diesel_compile_tests/tests/fail/aggregate_expression_requires_column_from_same_table.stderr @@ -0,0 +1,119 @@ +error[E0277]: the trait bound `posts::columns::id: diesel::SelectableExpression` is not satisfied + --> $DIR/aggregate_expression_requires_column_from_same_table.rs:19:38 + | +19 | let source = users::table.select(sum(posts::id)); + | ^^^^^^^^^^^^^^ the trait `diesel::SelectableExpression` is not implemented for `posts::columns::id` + | + = help: the following implementations were found: + >> + >> + >> + >> + > + = note: required because of the requirements on the impl of `diesel::SelectableExpression` for `diesel::expression::nullable::Nullable` + = note: required because of the requirements on the impl of `diesel::SelectableExpression` for `diesel::expression::functions::aggregate_folding::sum::sum>` + = note: required because of the requirements on the impl of `diesel::query_dsl::select_dsl::SelectDsl>>` for `diesel::query_builder::SelectStatement` + +error[E0277]: the trait bound `users::table: diesel::query_source::AppearsInFromClause` is not satisfied + --> $DIR/aggregate_expression_requires_column_from_same_table.rs:19:31 + | +19 | let source = users::table.select(sum(posts::id)); + | ^^^^^^ the trait `diesel::query_source::AppearsInFromClause` is not implemented for `users::table` + | + = help: the following implementations were found: + > + = note: required because of the requirements on the impl of `diesel::AppearsOnTable` for `posts::columns::id` + = note: required because of the requirements on the impl of `diesel::AppearsOnTable` for `diesel::expression::nullable::Nullable` + = note: required because of the requirements on the impl of `diesel::SelectableExpression` for `diesel::expression::nullable::Nullable` + = note: required because of the requirements on the impl of `diesel::SelectableExpression` for `diesel::expression::functions::aggregate_folding::sum::sum>` + = note: required because of the requirements on the impl of `diesel::query_dsl::select_dsl::SelectDsl>>` for `diesel::query_builder::SelectStatement` + +error[E0277]: the trait bound `posts::columns::id: diesel::SelectableExpression` is not satisfied + --> $DIR/aggregate_expression_requires_column_from_same_table.rs:20:38 + | +20 | let source = users::table.select(avg(posts::id)); + | ^^^^^^^^^^^^^^ the trait `diesel::SelectableExpression` is not implemented for `posts::columns::id` + | + = help: the following implementations were found: + >> + >> + >> + >> + > + = note: required because of the requirements on the impl of `diesel::SelectableExpression` for `diesel::expression::nullable::Nullable` + = note: required because of the requirements on the impl of `diesel::SelectableExpression` for `diesel::expression::functions::aggregate_folding::avg::avg>` + = note: required because of the requirements on the impl of `diesel::query_dsl::select_dsl::SelectDsl>>` for `diesel::query_builder::SelectStatement` + +error[E0277]: the trait bound `users::table: diesel::query_source::AppearsInFromClause` is not satisfied + --> $DIR/aggregate_expression_requires_column_from_same_table.rs:20:31 + | +20 | let source = users::table.select(avg(posts::id)); + | ^^^^^^ the trait `diesel::query_source::AppearsInFromClause` is not implemented for `users::table` + | + = help: the following implementations were found: + > + = note: required because of the requirements on the impl of `diesel::AppearsOnTable` for `posts::columns::id` + = note: required because of the requirements on the impl of `diesel::AppearsOnTable` for `diesel::expression::nullable::Nullable` + = note: required because of the requirements on the impl of `diesel::SelectableExpression` for `diesel::expression::nullable::Nullable` + = note: required because of the requirements on the impl of `diesel::SelectableExpression` for `diesel::expression::functions::aggregate_folding::avg::avg>` + = note: required because of the requirements on the impl of `diesel::query_dsl::select_dsl::SelectDsl>>` for `diesel::query_builder::SelectStatement` + +error[E0277]: the trait bound `posts::columns::id: diesel::SelectableExpression` is not satisfied + --> $DIR/aggregate_expression_requires_column_from_same_table.rs:21:38 + | +21 | let source = users::table.select(max(posts::id)); + | ^^^^^^^^^^^^^^ the trait `diesel::SelectableExpression` is not implemented for `posts::columns::id` + | + = help: the following implementations were found: + >> + >> + >> + >> + > + = note: required because of the requirements on the impl of `diesel::SelectableExpression` for `diesel::expression::nullable::Nullable` + = note: required because of the requirements on the impl of `diesel::SelectableExpression` for `diesel::expression::functions::aggregate_ordering::max::max>` + = note: required because of the requirements on the impl of `diesel::query_dsl::select_dsl::SelectDsl>>` for `diesel::query_builder::SelectStatement` + +error[E0277]: the trait bound `users::table: diesel::query_source::AppearsInFromClause` is not satisfied + --> $DIR/aggregate_expression_requires_column_from_same_table.rs:21:31 + | +21 | let source = users::table.select(max(posts::id)); + | ^^^^^^ the trait `diesel::query_source::AppearsInFromClause` is not implemented for `users::table` + | + = help: the following implementations were found: + > + = note: required because of the requirements on the impl of `diesel::AppearsOnTable` for `posts::columns::id` + = note: required because of the requirements on the impl of `diesel::AppearsOnTable` for `diesel::expression::nullable::Nullable` + = note: required because of the requirements on the impl of `diesel::SelectableExpression` for `diesel::expression::nullable::Nullable` + = note: required because of the requirements on the impl of `diesel::SelectableExpression` for `diesel::expression::functions::aggregate_ordering::max::max>` + = note: required because of the requirements on the impl of `diesel::query_dsl::select_dsl::SelectDsl>>` for `diesel::query_builder::SelectStatement` + +error[E0277]: the trait bound `posts::columns::id: diesel::SelectableExpression` is not satisfied + --> $DIR/aggregate_expression_requires_column_from_same_table.rs:22:38 + | +22 | let source = users::table.select(min(posts::id)); + | ^^^^^^^^^^^^^^ the trait `diesel::SelectableExpression` is not implemented for `posts::columns::id` + | + = help: the following implementations were found: + >> + >> + >> + >> + > + = note: required because of the requirements on the impl of `diesel::SelectableExpression` for `diesel::expression::nullable::Nullable` + = note: required because of the requirements on the impl of `diesel::SelectableExpression` for `diesel::expression::functions::aggregate_ordering::min::min>` + = note: required because of the requirements on the impl of `diesel::query_dsl::select_dsl::SelectDsl>>` for `diesel::query_builder::SelectStatement` + +error[E0277]: the trait bound `users::table: diesel::query_source::AppearsInFromClause` is not satisfied + --> $DIR/aggregate_expression_requires_column_from_same_table.rs:22:31 + | +22 | let source = users::table.select(min(posts::id)); + | ^^^^^^ the trait `diesel::query_source::AppearsInFromClause` is not implemented for `users::table` + | + = help: the following implementations were found: + > + = note: required because of the requirements on the impl of `diesel::AppearsOnTable` for `posts::columns::id` + = note: required because of the requirements on the impl of `diesel::AppearsOnTable` for `diesel::expression::nullable::Nullable` + = note: required because of the requirements on the impl of `diesel::SelectableExpression` for `diesel::expression::nullable::Nullable` + = note: required because of the requirements on the impl of `diesel::SelectableExpression` for `diesel::expression::functions::aggregate_ordering::min::min>` + = note: required because of the requirements on the impl of `diesel::query_dsl::select_dsl::SelectDsl>>` for `diesel::query_builder::SelectStatement` diff --git a/diesel_compile_tests/tests/compile-fail/any_is_only_selectable_if_inner_expr_is_selectable.rs b/diesel_compile_tests/tests/fail/any_is_only_selectable_if_inner_expr_is_selectable.rs similarity index 85% rename from diesel_compile_tests/tests/compile-fail/any_is_only_selectable_if_inner_expr_is_selectable.rs rename to diesel_compile_tests/tests/fail/any_is_only_selectable_if_inner_expr_is_selectable.rs index a48c0221dffe..46e2018bbdf5 100644 --- a/diesel_compile_tests/tests/compile-fail/any_is_only_selectable_if_inner_expr_is_selectable.rs +++ b/diesel_compile_tests/tests/fail/any_is_only_selectable_if_inner_expr_is_selectable.rs @@ -1,7 +1,7 @@ -#[macro_use] extern crate diesel; +extern crate diesel; -use diesel::*; use diesel::dsl::*; +use diesel::*; table! { stuff { @@ -29,5 +29,4 @@ fn main() { let _ = stuff.filter(name.eq(any(more_stuff::names))) .load(&conn); - //~^ ERROR AppearsInFromClause } diff --git a/diesel_compile_tests/tests/fail/any_is_only_selectable_if_inner_expr_is_selectable.stderr b/diesel_compile_tests/tests/fail/any_is_only_selectable_if_inner_expr_is_selectable.stderr new file mode 100644 index 000000000000..14cb509248a7 --- /dev/null +++ b/diesel_compile_tests/tests/fail/any_is_only_selectable_if_inner_expr_is_selectable.stderr @@ -0,0 +1,15 @@ +error[E0277]: the trait bound `stuff::table: diesel::query_source::AppearsInFromClause` is not satisfied + --> $DIR/any_is_only_selectable_if_inner_expr_is_selectable.rs:31:10 + | +31 | .load(&conn); + | ^^^^ the trait `diesel::query_source::AppearsInFromClause` is not implemented for `stuff::table` + | + = help: the following implementations were found: + > + = note: required because of the requirements on the impl of `diesel::AppearsOnTable` for `more_stuff::columns::names` + = note: required because of the requirements on the impl of `diesel::AppearsOnTable` for `diesel::pg::expression::array_comparison::Any` + = note: required because of the requirements on the impl of `diesel::AppearsOnTable` for `diesel::expression::operators::Eq>` + = note: required because of the requirements on the impl of `diesel::AppearsOnTable` for `diesel::expression::grouped::Grouped>>` + = note: required because of the requirements on the impl of `diesel::query_builder::where_clause::ValidWhereClause` for `diesel::query_builder::where_clause::WhereClause>>>` + = note: required because of the requirements on the impl of `diesel::query_builder::Query` for `diesel::query_builder::SelectStatement>>>>` + = note: required because of the requirements on the impl of `diesel::query_dsl::LoadQuery<_, _>` for `diesel::query_builder::SelectStatement>>>>` diff --git a/diesel_compile_tests/tests/compile-fail/array_expressions_must_be_correct_type.rs b/diesel_compile_tests/tests/fail/array_expressions_must_be_correct_type.rs similarity index 64% rename from diesel_compile_tests/tests/compile-fail/array_expressions_must_be_correct_type.rs rename to diesel_compile_tests/tests/fail/array_expressions_must_be_correct_type.rs index 39184e5c5440..0d4d5d07a314 100644 --- a/diesel_compile_tests/tests/compile-fail/array_expressions_must_be_correct_type.rs +++ b/diesel_compile_tests/tests/fail/array_expressions_must_be_correct_type.rs @@ -1,20 +1,11 @@ -#[macro_use] extern crate diesel; -use diesel::*; use diesel::dsl::*; +use diesel::*; fn main() { let connection = PgConnection::establish("").unwrap(); select(array((1, 3))).get_result::>(&connection); select(array((1f64, 3f64))).get_result::>(&connection); - //~^ ERROR E0277 - //~| ERROR E0277 - //~| ERROR E0277 - //~| ERROR E0277 - //~| ERROR E0277 - //~| ERROR E0277 - //~| ERROR E0277 - //~| ERROR E0277 select(array((1f64, 3f64))).get_result::>(&connection); } diff --git a/diesel_compile_tests/tests/fail/array_expressions_must_be_correct_type.stderr b/diesel_compile_tests/tests/fail/array_expressions_must_be_correct_type.stderr new file mode 100644 index 000000000000..ac8aee8aba5a --- /dev/null +++ b/diesel_compile_tests/tests/fail/array_expressions_must_be_correct_type.stderr @@ -0,0 +1,100 @@ +error[E0277]: the trait bound `f64: diesel::SelectableExpression<()>` is not satisfied + --> $DIR/array_expressions_must_be_correct_type.rs:9:5 + | +9 | select(array((1f64, 3f64))).get_result::>(&connection); + | ^^^^^^ the trait `diesel::SelectableExpression<()>` is not implemented for `f64` + | + ::: $WORKSPACE/diesel/src/query_builder/functions.rs:465:26 + | +465 | SelectStatement<()>: SelectDsl, + | ------------ required by this bound in `diesel::select` + | + = note: required because of the requirements on the impl of `diesel::SelectableExpression<()>` for `(f64, f64)` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<()>` for `diesel::pg::expression::array::ArrayLiteral<(f64, f64), diesel::sql_types::Integer>` + = note: required because of the requirements on the impl of `diesel::query_dsl::select_dsl::SelectDsl>` for `diesel::query_builder::SelectStatement<()>` + +error[E0277]: the trait bound `f64: diesel::expression::ValidGrouping<()>` is not satisfied + --> $DIR/array_expressions_must_be_correct_type.rs:9:5 + | +9 | select(array((1f64, 3f64))).get_result::>(&connection); + | ^^^^^^ the trait `diesel::expression::ValidGrouping<()>` is not implemented for `f64` + | + ::: $WORKSPACE/diesel/src/query_builder/functions.rs:465:26 + | +465 | SelectStatement<()>: SelectDsl, + | ------------ required by this bound in `diesel::select` + | + = note: required because of the requirements on the impl of `diesel::expression::ValidGrouping<()>` for `(f64, f64)` + = note: required because of the requirements on the impl of `diesel::expression::ValidGrouping<()>` for `diesel::pg::expression::array::ArrayLiteral<(f64, f64), diesel::sql_types::Integer>` + = note: required because of the requirements on the impl of `diesel::query_dsl::select_dsl::SelectDsl>` for `diesel::query_builder::SelectStatement<()>` + +error[E0277]: the trait bound `f64: diesel::SelectableExpression<()>` is not satisfied + --> $DIR/array_expressions_must_be_correct_type.rs:9:33 + | +9 | select(array((1f64, 3f64))).get_result::>(&connection); + | ^^^^^^^^^^ the trait `diesel::SelectableExpression<()>` is not implemented for `f64` + | + = note: required because of the requirements on the impl of `diesel::SelectableExpression<()>` for `(f64, f64)` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<()>` for `diesel::pg::expression::array::ArrayLiteral<(f64, f64), diesel::sql_types::Integer>` + = note: required because of the requirements on the impl of `diesel::query_builder::SelectClauseExpression<()>` for `diesel::query_builder::select_clause::SelectClause>` + = note: required because of the requirements on the impl of `diesel::query_builder::Query` for `diesel::query_builder::SelectStatement<(), diesel::query_builder::select_clause::SelectClause>>` + = note: required because of the requirements on the impl of `diesel::query_dsl::LoadQuery<_, std::vec::Vec>` for `diesel::query_builder::SelectStatement<(), diesel::query_builder::select_clause::SelectClause>>` + +error[E0277]: the trait bound `f64: diesel::expression::ValidGrouping<()>` is not satisfied + --> $DIR/array_expressions_must_be_correct_type.rs:9:33 + | +9 | select(array((1f64, 3f64))).get_result::>(&connection); + | ^^^^^^^^^^ the trait `diesel::expression::ValidGrouping<()>` is not implemented for `f64` + | + = note: required because of the requirements on the impl of `diesel::expression::ValidGrouping<()>` for `(f64, f64)` + = note: required because of the requirements on the impl of `diesel::expression::ValidGrouping<()>` for `diesel::pg::expression::array::ArrayLiteral<(f64, f64), diesel::sql_types::Integer>` + = note: required because of the requirements on the impl of `diesel::query_builder::Query` for `diesel::query_builder::SelectStatement<(), diesel::query_builder::select_clause::SelectClause>>` + = note: required because of the requirements on the impl of `diesel::query_dsl::LoadQuery<_, std::vec::Vec>` for `diesel::query_builder::SelectStatement<(), diesel::query_builder::select_clause::SelectClause>>` + +error[E0277]: the trait bound `f64: diesel::query_builder::QueryId` is not satisfied + --> $DIR/array_expressions_must_be_correct_type.rs:9:33 + | +9 | select(array((1f64, 3f64))).get_result::>(&connection); + | ^^^^^^^^^^ the trait `diesel::query_builder::QueryId` is not implemented for `f64` + | + = note: required because of the requirements on the impl of `diesel::query_builder::QueryId` for `(f64, f64)` + = note: required because of the requirements on the impl of `diesel::query_builder::QueryId` for `diesel::pg::expression::array::ArrayLiteral<(f64, f64), diesel::sql_types::Integer>` + = note: required because of the requirements on the impl of `diesel::query_builder::QueryId` for `diesel::query_builder::select_clause::SelectClause>` + = note: required because of the requirements on the impl of `diesel::query_builder::QueryId` for `diesel::query_builder::SelectStatement<(), diesel::query_builder::select_clause::SelectClause>>` + = note: required because of the requirements on the impl of `diesel::query_dsl::LoadQuery<_, std::vec::Vec>` for `diesel::query_builder::SelectStatement<(), diesel::query_builder::select_clause::SelectClause>>` + +error[E0277]: the trait bound `f64: diesel::query_builder::QueryFragment<_>` is not satisfied + --> $DIR/array_expressions_must_be_correct_type.rs:9:33 + | +9 | select(array((1f64, 3f64))).get_result::>(&connection); + | ^^^^^^^^^^ the trait `diesel::query_builder::QueryFragment<_>` is not implemented for `f64` + | + = note: required because of the requirements on the impl of `diesel::query_builder::QueryFragment<_>` for `(f64, f64)` + = note: required because of the requirements on the impl of `for<'a> diesel::query_builder::QueryFragment<_>` for `&'a (f64, f64)` + = note: required because of the requirements on the impl of `diesel::query_builder::QueryFragment<_>` for `diesel::pg::expression::array::ArrayLiteral<(f64, f64), diesel::sql_types::Integer>` + = note: required because of the requirements on the impl of `diesel::query_builder::SelectClauseQueryFragment<(), _>` for `diesel::query_builder::select_clause::SelectClause>` + = note: required because of the requirements on the impl of `diesel::query_builder::QueryFragment<_>` for `diesel::query_builder::SelectStatement<(), diesel::query_builder::select_clause::SelectClause>>` + = note: required because of the requirements on the impl of `diesel::query_dsl::LoadQuery<_, std::vec::Vec>` for `diesel::query_builder::SelectStatement<(), diesel::query_builder::select_clause::SelectClause>>` + +error[E0277]: the trait bound `f64: diesel::Expression` is not satisfied + --> $DIR/array_expressions_must_be_correct_type.rs:9:12 + | +9 | select(array((1f64, 3f64))).get_result::>(&connection); + | ^^^^^ the trait `diesel::Expression` is not implemented for `f64` + | + ::: $WORKSPACE/diesel/src/pg/expression/array.rs:51:8 + | +51 | T: AsExpressionList, + | -------------------- required by this bound in `diesel::dsl::array` + | + = note: required because of the requirements on the impl of `diesel::expression::AsExpression` for `f64` + = note: required because of the requirements on the impl of `diesel::expression::AsExpressionList` for `(f64, f64)` + +error[E0277]: the trait bound `diesel::query_builder::SelectStatement<()>: diesel::query_dsl::select_dsl::SelectDsl>` is not satisfied + --> $DIR/array_expressions_must_be_correct_type.rs:9:5 + | +9 | select(array((1f64, 3f64))).get_result::>(&connection); + | ^^^^^^ the trait `diesel::query_dsl::select_dsl::SelectDsl>` is not implemented for `diesel::query_builder::SelectStatement<()>` + | + = help: the following implementations were found: + as diesel::query_dsl::select_dsl::SelectDsl> diff --git a/diesel_compile_tests/tests/compile-fail/array_expressions_must_be_same_type.rs b/diesel_compile_tests/tests/fail/array_expressions_must_be_same_type.rs similarity index 55% rename from diesel_compile_tests/tests/compile-fail/array_expressions_must_be_same_type.rs rename to diesel_compile_tests/tests/fail/array_expressions_must_be_same_type.rs index e5db544f1684..69a14b502f3f 100644 --- a/diesel_compile_tests/tests/compile-fail/array_expressions_must_be_same_type.rs +++ b/diesel_compile_tests/tests/fail/array_expressions_must_be_same_type.rs @@ -1,4 +1,3 @@ -#[macro_use] extern crate diesel; use diesel::*; @@ -10,22 +9,5 @@ fn main() { select(array((1f64, 3f64))).get_result::>(&connection).unwrap(); select(array((1, 3f64))).get_result::>(&connection).unwrap(); - //~^ ERROR E0277 - //~| ERROR E0277 - //~| ERROR E0277 - //~| ERROR E0277 - //~| ERROR E0277 - //~| ERROR E0277 - //~| ERROR E0277 - //~| ERROR E0277 - select(array((1, 3f64))).get_result::>(&connection).unwrap(); - //~^ ERROR E0277 - //~| ERROR E0277 - //~| ERROR E0277 - //~| ERROR E0277 - //~| ERROR E0277 - //~| ERROR E0277 - //~| ERROR E0277 - //~| ERROR E0277 } diff --git a/diesel_compile_tests/tests/fail/array_expressions_must_be_same_type.stderr b/diesel_compile_tests/tests/fail/array_expressions_must_be_same_type.stderr new file mode 100644 index 000000000000..bd1196c84705 --- /dev/null +++ b/diesel_compile_tests/tests/fail/array_expressions_must_be_same_type.stderr @@ -0,0 +1,243 @@ +error[E0277]: the trait bound `f64: diesel::SelectableExpression<()>` is not satisfied + --> $DIR/array_expressions_must_be_same_type.rs:11:5 + | +11 | select(array((1, 3f64))).get_result::>(&connection).unwrap(); + | ^^^^^^ the trait `diesel::SelectableExpression<()>` is not implemented for `f64` + | + ::: $WORKSPACE/diesel/src/query_builder/functions.rs + | + | SelectStatement<()>: SelectDsl, + | ------------ required by this bound in `diesel::select` + | + = note: required because of the requirements on the impl of `diesel::SelectableExpression<()>` for `(diesel::expression::bound::Bound, f64)` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<()>` for `diesel::pg::expression::array::ArrayLiteral<(diesel::expression::bound::Bound, f64), diesel::sql_types::Integer>` + = note: required because of the requirements on the impl of `diesel::query_dsl::select_dsl::SelectDsl, f64), diesel::sql_types::Integer>>` for `diesel::query_builder::SelectStatement<()>` + +error[E0277]: the trait bound `f64: diesel::expression::ValidGrouping<()>` is not satisfied + --> $DIR/array_expressions_must_be_same_type.rs:11:5 + | +11 | select(array((1, 3f64))).get_result::>(&connection).unwrap(); + | ^^^^^^ the trait `diesel::expression::ValidGrouping<()>` is not implemented for `f64` + | + ::: $WORKSPACE/diesel/src/query_builder/functions.rs + | + | SelectStatement<()>: SelectDsl, + | ------------ required by this bound in `diesel::select` + | + = note: required because of the requirements on the impl of `diesel::expression::ValidGrouping<()>` for `(diesel::expression::bound::Bound, f64)` + = note: required because of the requirements on the impl of `diesel::expression::ValidGrouping<()>` for `diesel::pg::expression::array::ArrayLiteral<(diesel::expression::bound::Bound, f64), diesel::sql_types::Integer>` + = note: required because of the requirements on the impl of `diesel::query_dsl::select_dsl::SelectDsl, f64), diesel::sql_types::Integer>>` for `diesel::query_builder::SelectStatement<()>` + +error[E0277]: the trait bound `f64: diesel::SelectableExpression<()>` is not satisfied + --> $DIR/array_expressions_must_be_same_type.rs:11:30 + | +11 | select(array((1, 3f64))).get_result::>(&connection).unwrap(); + | ^^^^^^^^^^ the trait `diesel::SelectableExpression<()>` is not implemented for `f64` + | + = note: required because of the requirements on the impl of `diesel::SelectableExpression<()>` for `(diesel::expression::bound::Bound, f64)` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<()>` for `diesel::pg::expression::array::ArrayLiteral<(diesel::expression::bound::Bound, f64), diesel::sql_types::Integer>` + = note: required because of the requirements on the impl of `diesel::query_builder::SelectClauseExpression<()>` for `diesel::query_builder::select_clause::SelectClause, f64), diesel::sql_types::Integer>>` + = note: required because of the requirements on the impl of `diesel::query_builder::Query` for `diesel::query_builder::SelectStatement<(), diesel::query_builder::select_clause::SelectClause, f64), diesel::sql_types::Integer>>>` + = note: required because of the requirements on the impl of `diesel::query_dsl::LoadQuery<_, std::vec::Vec>` for `diesel::query_builder::SelectStatement<(), diesel::query_builder::select_clause::SelectClause, f64), diesel::sql_types::Integer>>>` + +error[E0277]: the trait bound `f64: diesel::expression::ValidGrouping<()>` is not satisfied + --> $DIR/array_expressions_must_be_same_type.rs:11:30 + | +11 | select(array((1, 3f64))).get_result::>(&connection).unwrap(); + | ^^^^^^^^^^ the trait `diesel::expression::ValidGrouping<()>` is not implemented for `f64` + | + = note: required because of the requirements on the impl of `diesel::expression::ValidGrouping<()>` for `(diesel::expression::bound::Bound, f64)` + = note: required because of the requirements on the impl of `diesel::expression::ValidGrouping<()>` for `diesel::pg::expression::array::ArrayLiteral<(diesel::expression::bound::Bound, f64), diesel::sql_types::Integer>` + = note: required because of the requirements on the impl of `diesel::query_builder::Query` for `diesel::query_builder::SelectStatement<(), diesel::query_builder::select_clause::SelectClause, f64), diesel::sql_types::Integer>>>` + = note: required because of the requirements on the impl of `diesel::query_dsl::LoadQuery<_, std::vec::Vec>` for `diesel::query_builder::SelectStatement<(), diesel::query_builder::select_clause::SelectClause, f64), diesel::sql_types::Integer>>>` + +error[E0277]: the trait bound `f64: diesel::query_builder::QueryId` is not satisfied + --> $DIR/array_expressions_must_be_same_type.rs:11:30 + | +11 | select(array((1, 3f64))).get_result::>(&connection).unwrap(); + | ^^^^^^^^^^ the trait `diesel::query_builder::QueryId` is not implemented for `f64` + | + = note: required because of the requirements on the impl of `diesel::query_builder::QueryId` for `(diesel::expression::bound::Bound, f64)` + = note: required because of the requirements on the impl of `diesel::query_builder::QueryId` for `diesel::pg::expression::array::ArrayLiteral<(diesel::expression::bound::Bound, f64), diesel::sql_types::Integer>` + = note: required because of the requirements on the impl of `diesel::query_builder::QueryId` for `diesel::query_builder::select_clause::SelectClause, f64), diesel::sql_types::Integer>>` + = note: required because of the requirements on the impl of `diesel::query_builder::QueryId` for `diesel::query_builder::SelectStatement<(), diesel::query_builder::select_clause::SelectClause, f64), diesel::sql_types::Integer>>>` + = note: required because of the requirements on the impl of `diesel::query_dsl::LoadQuery<_, std::vec::Vec>` for `diesel::query_builder::SelectStatement<(), diesel::query_builder::select_clause::SelectClause, f64), diesel::sql_types::Integer>>>` + +error[E0277]: the trait bound `f64: diesel::query_builder::QueryFragment<_>` is not satisfied + --> $DIR/array_expressions_must_be_same_type.rs:11:30 + | +11 | select(array((1, 3f64))).get_result::>(&connection).unwrap(); + | ^^^^^^^^^^ the trait `diesel::query_builder::QueryFragment<_>` is not implemented for `f64` + | + = note: required because of the requirements on the impl of `diesel::query_builder::QueryFragment<_>` for `(diesel::expression::bound::Bound, f64)` + = note: required because of the requirements on the impl of `for<'a> diesel::query_builder::QueryFragment<_>` for `&'a (diesel::expression::bound::Bound, f64)` + = note: required because of the requirements on the impl of `diesel::query_builder::QueryFragment<_>` for `diesel::pg::expression::array::ArrayLiteral<(diesel::expression::bound::Bound, f64), diesel::sql_types::Integer>` + = note: required because of the requirements on the impl of `diesel::query_builder::SelectClauseQueryFragment<(), _>` for `diesel::query_builder::select_clause::SelectClause, f64), diesel::sql_types::Integer>>` + = note: required because of the requirements on the impl of `diesel::query_builder::QueryFragment<_>` for `diesel::query_builder::SelectStatement<(), diesel::query_builder::select_clause::SelectClause, f64), diesel::sql_types::Integer>>>` + = note: required because of the requirements on the impl of `diesel::query_dsl::LoadQuery<_, std::vec::Vec>` for `diesel::query_builder::SelectStatement<(), diesel::query_builder::select_clause::SelectClause, f64), diesel::sql_types::Integer>>>` + +error[E0277]: the trait bound `f64: diesel::Expression` is not satisfied + --> $DIR/array_expressions_must_be_same_type.rs:11:12 + | +11 | select(array((1, 3f64))).get_result::>(&connection).unwrap(); + | ^^^^^ the trait `diesel::Expression` is not implemented for `f64` + | + ::: $WORKSPACE/diesel/src/pg/expression/array.rs + | + | T: AsExpressionList, + | -------------------- required by this bound in `diesel::dsl::array` + | + = note: required because of the requirements on the impl of `diesel::expression::AsExpression` for `f64` + = note: required because of the requirements on the impl of `diesel::expression::AsExpressionList` for `(i32, f64)` + +error[E0277]: the trait bound `{integer}: diesel::SelectableExpression<()>` is not satisfied + --> $DIR/array_expressions_must_be_same_type.rs:12:5 + | +12 | select(array((1, 3f64))).get_result::>(&connection).unwrap(); + | ^^^^^^ the trait `diesel::SelectableExpression<()>` is not implemented for `{integer}` + | + ::: $WORKSPACE/diesel/src/query_builder/functions.rs + | + | SelectStatement<()>: SelectDsl, + | ------------ required by this bound in `diesel::select` + | + = help: the following implementations were found: + <&'a T as diesel::SelectableExpression> + <(A, B) as diesel::SelectableExpression> + <(A, B, C) as diesel::SelectableExpression> + <(A, B, C, D) as diesel::SelectableExpression> + and 108 others + = note: required because of the requirements on the impl of `diesel::SelectableExpression<()>` for `({integer}, diesel::expression::bound::Bound)` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<()>` for `diesel::pg::expression::array::ArrayLiteral<({integer}, diesel::expression::bound::Bound), diesel::sql_types::Double>` + = note: required because of the requirements on the impl of `diesel::query_dsl::select_dsl::SelectDsl), diesel::sql_types::Double>>` for `diesel::query_builder::SelectStatement<()>` + +error[E0277]: the trait bound `{integer}: diesel::expression::ValidGrouping<()>` is not satisfied + --> $DIR/array_expressions_must_be_same_type.rs:12:5 + | +12 | select(array((1, 3f64))).get_result::>(&connection).unwrap(); + | ^^^^^^ the trait `diesel::expression::ValidGrouping<()>` is not implemented for `{integer}` + | + ::: $WORKSPACE/diesel/src/query_builder/functions.rs + | + | SelectStatement<()>: SelectDsl, + | ------------ required by this bound in `diesel::select` + | + = help: the following implementations were found: + <&'a T as diesel::expression::ValidGrouping> + <(A, B) as diesel::expression::ValidGrouping<__GroupByClause>> + <(A, B, C) as diesel::expression::ValidGrouping<__GroupByClause>> + <(A, B, C, D) as diesel::expression::ValidGrouping<__GroupByClause>> + and 111 others + = note: required because of the requirements on the impl of `diesel::expression::ValidGrouping<()>` for `({integer}, diesel::expression::bound::Bound)` + = note: required because of the requirements on the impl of `diesel::expression::ValidGrouping<()>` for `diesel::pg::expression::array::ArrayLiteral<({integer}, diesel::expression::bound::Bound), diesel::sql_types::Double>` + = note: required because of the requirements on the impl of `diesel::query_dsl::select_dsl::SelectDsl), diesel::sql_types::Double>>` for `diesel::query_builder::SelectStatement<()>` + +error[E0277]: the trait bound `{integer}: diesel::SelectableExpression<()>` is not satisfied + --> $DIR/array_expressions_must_be_same_type.rs:12:30 + | +12 | select(array((1, 3f64))).get_result::>(&connection).unwrap(); + | ^^^^^^^^^^ the trait `diesel::SelectableExpression<()>` is not implemented for `{integer}` + | + = help: the following implementations were found: + <&'a T as diesel::SelectableExpression> + <(A, B) as diesel::SelectableExpression> + <(A, B, C) as diesel::SelectableExpression> + <(A, B, C, D) as diesel::SelectableExpression> + and 108 others + = note: required because of the requirements on the impl of `diesel::SelectableExpression<()>` for `({integer}, diesel::expression::bound::Bound)` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<()>` for `diesel::pg::expression::array::ArrayLiteral<({integer}, diesel::expression::bound::Bound), diesel::sql_types::Double>` + = note: required because of the requirements on the impl of `diesel::query_builder::SelectClauseExpression<()>` for `diesel::query_builder::select_clause::SelectClause), diesel::sql_types::Double>>` + = note: required because of the requirements on the impl of `diesel::query_builder::Query` for `diesel::query_builder::SelectStatement<(), diesel::query_builder::select_clause::SelectClause), diesel::sql_types::Double>>>` + = note: required because of the requirements on the impl of `diesel::query_dsl::LoadQuery<_, std::vec::Vec>` for `diesel::query_builder::SelectStatement<(), diesel::query_builder::select_clause::SelectClause), diesel::sql_types::Double>>>` + +error[E0277]: the trait bound `{integer}: diesel::expression::ValidGrouping<()>` is not satisfied + --> $DIR/array_expressions_must_be_same_type.rs:12:30 + | +12 | select(array((1, 3f64))).get_result::>(&connection).unwrap(); + | ^^^^^^^^^^ the trait `diesel::expression::ValidGrouping<()>` is not implemented for `{integer}` + | + = help: the following implementations were found: + <&'a T as diesel::expression::ValidGrouping> + <(A, B) as diesel::expression::ValidGrouping<__GroupByClause>> + <(A, B, C) as diesel::expression::ValidGrouping<__GroupByClause>> + <(A, B, C, D) as diesel::expression::ValidGrouping<__GroupByClause>> + and 111 others + = note: required because of the requirements on the impl of `diesel::expression::ValidGrouping<()>` for `({integer}, diesel::expression::bound::Bound)` + = note: required because of the requirements on the impl of `diesel::expression::ValidGrouping<()>` for `diesel::pg::expression::array::ArrayLiteral<({integer}, diesel::expression::bound::Bound), diesel::sql_types::Double>` + = note: required because of the requirements on the impl of `diesel::query_builder::Query` for `diesel::query_builder::SelectStatement<(), diesel::query_builder::select_clause::SelectClause), diesel::sql_types::Double>>>` + = note: required because of the requirements on the impl of `diesel::query_dsl::LoadQuery<_, std::vec::Vec>` for `diesel::query_builder::SelectStatement<(), diesel::query_builder::select_clause::SelectClause), diesel::sql_types::Double>>>` + +error[E0277]: the trait bound `{integer}: diesel::query_builder::QueryId` is not satisfied + --> $DIR/array_expressions_must_be_same_type.rs:12:30 + | +12 | select(array((1, 3f64))).get_result::>(&connection).unwrap(); + | ^^^^^^^^^^ the trait `diesel::query_builder::QueryId` is not implemented for `{integer}` + | + = help: the following implementations were found: + <&'a T as diesel::query_builder::QueryId> + <() as diesel::query_builder::QueryId> + <(A, B) as diesel::query_builder::QueryId> + <(A, B, C) as diesel::query_builder::QueryId> + and 180 others + = note: required because of the requirements on the impl of `diesel::query_builder::QueryId` for `({integer}, diesel::expression::bound::Bound)` + = note: required because of the requirements on the impl of `diesel::query_builder::QueryId` for `diesel::pg::expression::array::ArrayLiteral<({integer}, diesel::expression::bound::Bound), diesel::sql_types::Double>` + = note: required because of the requirements on the impl of `diesel::query_builder::QueryId` for `diesel::query_builder::select_clause::SelectClause), diesel::sql_types::Double>>` + = note: required because of the requirements on the impl of `diesel::query_builder::QueryId` for `diesel::query_builder::SelectStatement<(), diesel::query_builder::select_clause::SelectClause), diesel::sql_types::Double>>>` + = note: required because of the requirements on the impl of `diesel::query_dsl::LoadQuery<_, std::vec::Vec>` for `diesel::query_builder::SelectStatement<(), diesel::query_builder::select_clause::SelectClause), diesel::sql_types::Double>>>` + +error[E0277]: the trait bound `{integer}: diesel::query_builder::QueryFragment<_>` is not satisfied + --> $DIR/array_expressions_must_be_same_type.rs:12:30 + | +12 | select(array((1, 3f64))).get_result::>(&connection).unwrap(); + | ^^^^^^^^^^ the trait `diesel::query_builder::QueryFragment<_>` is not implemented for `{integer}` + | + = help: the following implementations were found: + <&'a T as diesel::query_builder::QueryFragment> + <() as diesel::query_builder::QueryFragment> + <(A, B) as diesel::query_builder::QueryFragment<__DB>> + <(A, B, C) as diesel::query_builder::QueryFragment<__DB>> + and 211 others + = note: required because of the requirements on the impl of `diesel::query_builder::QueryFragment<_>` for `({integer}, diesel::expression::bound::Bound)` + = note: required because of the requirements on the impl of `for<'a> diesel::query_builder::QueryFragment<_>` for `&'a ({integer}, diesel::expression::bound::Bound)` + = note: required because of the requirements on the impl of `diesel::query_builder::QueryFragment<_>` for `diesel::pg::expression::array::ArrayLiteral<({integer}, diesel::expression::bound::Bound), diesel::sql_types::Double>` + = note: required because of the requirements on the impl of `diesel::query_builder::SelectClauseQueryFragment<(), _>` for `diesel::query_builder::select_clause::SelectClause), diesel::sql_types::Double>>` + = note: required because of the requirements on the impl of `diesel::query_builder::QueryFragment<_>` for `diesel::query_builder::SelectStatement<(), diesel::query_builder::select_clause::SelectClause), diesel::sql_types::Double>>>` + = note: required because of the requirements on the impl of `diesel::query_dsl::LoadQuery<_, std::vec::Vec>` for `diesel::query_builder::SelectStatement<(), diesel::query_builder::select_clause::SelectClause), diesel::sql_types::Double>>>` + +error[E0277]: the trait bound `{integer}: diesel::Expression` is not satisfied + --> $DIR/array_expressions_must_be_same_type.rs:12:12 + | +12 | select(array((1, 3f64))).get_result::>(&connection).unwrap(); + | ^^^^^ the trait `diesel::Expression` is not implemented for `{integer}` + | + ::: $WORKSPACE/diesel/src/pg/expression/array.rs + | + | T: AsExpressionList, + | -------------------- required by this bound in `diesel::dsl::array` + | + = help: the following implementations were found: + <&'a T as diesel::Expression> + <(A, B) as diesel::Expression> + <(A, B, C) as diesel::Expression> + <(A, B, C, D) as diesel::Expression> + and 96 others + = note: required because of the requirements on the impl of `diesel::expression::AsExpression` for `{integer}` + = note: required because of the requirements on the impl of `diesel::expression::AsExpressionList` for `({integer}, f64)` + +error[E0277]: the trait bound `diesel::query_builder::SelectStatement<()>: diesel::query_dsl::select_dsl::SelectDsl, f64), diesel::sql_types::Integer>>` is not satisfied + --> $DIR/array_expressions_must_be_same_type.rs:11:5 + | +11 | select(array((1, 3f64))).get_result::>(&connection).unwrap(); + | ^^^^^^ the trait `diesel::query_dsl::select_dsl::SelectDsl, f64), diesel::sql_types::Integer>>` is not implemented for `diesel::query_builder::SelectStatement<()>` + | + = help: the following implementations were found: + as diesel::query_dsl::select_dsl::SelectDsl> + +error[E0277]: the trait bound `diesel::query_builder::SelectStatement<()>: diesel::query_dsl::select_dsl::SelectDsl), diesel::sql_types::Double>>` is not satisfied + --> $DIR/array_expressions_must_be_same_type.rs:12:5 + | +12 | select(array((1, 3f64))).get_result::>(&connection).unwrap(); + | ^^^^^^ the trait `diesel::query_dsl::select_dsl::SelectDsl), diesel::sql_types::Double>>` is not implemented for `diesel::query_builder::SelectStatement<()>` + | + = help: the following implementations were found: + as diesel::query_dsl::select_dsl::SelectDsl> diff --git a/diesel_compile_tests/tests/compile-fail/array_only_usable_with_pg.rs b/diesel_compile_tests/tests/fail/array_only_usable_with_pg.rs similarity index 76% rename from diesel_compile_tests/tests/compile-fail/array_only_usable_with_pg.rs rename to diesel_compile_tests/tests/fail/array_only_usable_with_pg.rs index 045072d0ff62..c3d129a6c623 100644 --- a/diesel_compile_tests/tests/compile-fail/array_only_usable_with_pg.rs +++ b/diesel_compile_tests/tests/fail/array_only_usable_with_pg.rs @@ -1,17 +1,12 @@ -#[macro_use] extern crate diesel; -use diesel::*; use diesel::dsl::*; +use diesel::*; fn main() { let connection = SqliteConnection::establish("").unwrap(); select(array((1,))).get_result::>(&connection); - //~^ ERROR E0271 - //~| ERROR E0277 let connection = MysqlConnection::establish("").unwrap(); select(array((1,))).get_result::>(&connection); - //~^ ERROR E0271 - //~| ERROR E0277 } diff --git a/diesel_compile_tests/tests/fail/array_only_usable_with_pg.stderr b/diesel_compile_tests/tests/fail/array_only_usable_with_pg.stderr new file mode 100644 index 000000000000..7c6737af395e --- /dev/null +++ b/diesel_compile_tests/tests/fail/array_only_usable_with_pg.stderr @@ -0,0 +1,45 @@ +error[E0271]: type mismatch resolving `::Backend == diesel::pg::Pg` + --> $DIR/array_only_usable_with_pg.rs:8:25 + | +8 | select(array((1,))).get_result::>(&connection); + | ^^^^^^^^^^ expected struct `diesel::sqlite::Sqlite`, found struct `diesel::pg::Pg` + | + = note: required because of the requirements on the impl of `diesel::query_dsl::LoadQuery>` for `diesel::query_builder::SelectStatement<(), diesel::query_builder::select_clause::SelectClause,), diesel::sql_types::Integer>>>` + +error[E0277]: the trait bound `diesel::sqlite::Sqlite: diesel::sql_types::HasSqlType>` is not satisfied + --> $DIR/array_only_usable_with_pg.rs:8:25 + | +8 | select(array((1,))).get_result::>(&connection); + | ^^^^^^^^^^ the trait `diesel::sql_types::HasSqlType>` is not implemented for `diesel::sqlite::Sqlite` + | + = help: the following implementations were found: + > + > + > + > + and 8 others + = note: required because of the requirements on the impl of `diesel::expression::QueryMetadata>` for `diesel::sqlite::Sqlite` + = note: required because of the requirements on the impl of `diesel::query_dsl::LoadQuery>` for `diesel::query_builder::SelectStatement<(), diesel::query_builder::select_clause::SelectClause,), diesel::sql_types::Integer>>>` + +error[E0271]: type mismatch resolving `::Backend == diesel::pg::Pg` + --> $DIR/array_only_usable_with_pg.rs:11:25 + | +11 | select(array((1,))).get_result::>(&connection); + | ^^^^^^^^^^ expected struct `diesel::mysql::Mysql`, found struct `diesel::pg::Pg` + | + = note: required because of the requirements on the impl of `diesel::query_dsl::LoadQuery>` for `diesel::query_builder::SelectStatement<(), diesel::query_builder::select_clause::SelectClause,), diesel::sql_types::Integer>>>` + +error[E0277]: the trait bound `diesel::mysql::Mysql: diesel::sql_types::HasSqlType>` is not satisfied + --> $DIR/array_only_usable_with_pg.rs:11:25 + | +11 | select(array((1,))).get_result::>(&connection); + | ^^^^^^^^^^ the trait `diesel::sql_types::HasSqlType>` is not implemented for `diesel::mysql::Mysql` + | + = help: the following implementations were found: + > + > + > + > + and 15 others + = note: required because of the requirements on the impl of `diesel::expression::QueryMetadata>` for `diesel::mysql::Mysql` + = note: required because of the requirements on the impl of `diesel::query_dsl::LoadQuery>` for `diesel::query_builder::SelectStatement<(), diesel::query_builder::select_clause::SelectClause,), diesel::sql_types::Integer>>>` diff --git a/diesel_compile_tests/tests/ui/as_changeset_bad_column_name.rs b/diesel_compile_tests/tests/fail/as_changeset_bad_column_name.rs similarity index 95% rename from diesel_compile_tests/tests/ui/as_changeset_bad_column_name.rs rename to diesel_compile_tests/tests/fail/as_changeset_bad_column_name.rs index bd410b03e056..eccee4f70e33 100644 --- a/diesel_compile_tests/tests/ui/as_changeset_bad_column_name.rs +++ b/diesel_compile_tests/tests/fail/as_changeset_bad_column_name.rs @@ -18,3 +18,5 @@ struct UserStruct { #[derive(AsChangeset)] #[table_name = "users"] struct UserTuple(#[column_name = "name"] String); + +fn main() {} diff --git a/diesel_compile_tests/tests/ui/as_changeset_bad_column_name.stderr b/diesel_compile_tests/tests/fail/as_changeset_bad_column_name.stderr similarity index 73% rename from diesel_compile_tests/tests/ui/as_changeset_bad_column_name.stderr rename to diesel_compile_tests/tests/fail/as_changeset_bad_column_name.stderr index 37ee63c86256..2ddd2033f28f 100644 --- a/diesel_compile_tests/tests/ui/as_changeset_bad_column_name.stderr +++ b/diesel_compile_tests/tests/fail/as_changeset_bad_column_name.stderr @@ -41,20 +41,3 @@ error[E0425]: cannot find value `name` in module `users` | ^^^^^^ not found in `users` | = note: this error originates in a derive macro (in Nightly builds, run with -Z macro-backtrace for more info) - -error[E0601]: `main` function not found in crate `as_changeset_bad_column_name` - --> $DIR/as_changeset_bad_column_name.rs:1:1 - | -1 | / #[macro_use] -2 | | extern crate diesel; -3 | | -4 | | table! { -... | -19 | | #[table_name = "users"] -20 | | struct UserTuple(#[column_name = "name"] String); - | |_________________________________________________^ consider adding a `main` function to `$DIR/as_changeset_bad_column_name.rs` - -error: aborting due to 7 previous errors - -Some errors have detailed explanations: E0412, E0425, E0601. -For more information about an error, try `rustc --explain E0412`. diff --git a/diesel_compile_tests/tests/ui/as_changeset_bad_column_name_syntax.rs b/diesel_compile_tests/tests/fail/as_changeset_bad_column_name_syntax.rs similarity index 93% rename from diesel_compile_tests/tests/ui/as_changeset_bad_column_name_syntax.rs rename to diesel_compile_tests/tests/fail/as_changeset_bad_column_name_syntax.rs index 2081a998bc0a..bfe6318819bf 100644 --- a/diesel_compile_tests/tests/ui/as_changeset_bad_column_name_syntax.rs +++ b/diesel_compile_tests/tests/fail/as_changeset_bad_column_name_syntax.rs @@ -14,3 +14,5 @@ struct User { #[column_name] name: String, } + +fn main() {} diff --git a/diesel_compile_tests/tests/ui/as_changeset_bad_column_name_syntax.stderr b/diesel_compile_tests/tests/fail/as_changeset_bad_column_name_syntax.stderr similarity index 51% rename from diesel_compile_tests/tests/ui/as_changeset_bad_column_name_syntax.stderr rename to diesel_compile_tests/tests/fail/as_changeset_bad_column_name_syntax.stderr index 925a4bb5335d..8bcceeb2cc6a 100644 --- a/diesel_compile_tests/tests/ui/as_changeset_bad_column_name_syntax.stderr +++ b/diesel_compile_tests/tests/fail/as_changeset_bad_column_name_syntax.stderr @@ -15,20 +15,3 @@ error[E0425]: cannot find value `column_name` in module `users` | 14 | #[column_name] | ^^^^^^^^^^^ not found in `users` - -error[E0601]: `main` function not found in crate `as_changeset_bad_column_name_syntax` - --> $DIR/as_changeset_bad_column_name_syntax.rs:1:1 - | -1 | / #[macro_use] -2 | | extern crate diesel; -3 | | -4 | | table! { -... | -15 | | name: String, -16 | | } - | |_^ consider adding a `main` function to `$DIR/as_changeset_bad_column_name_syntax.rs` - -error: aborting due to 4 previous errors - -Some errors have detailed explanations: E0412, E0425, E0601. -For more information about an error, try `rustc --explain E0412`. diff --git a/diesel_compile_tests/tests/ui/as_changeset_bad_options.rs b/diesel_compile_tests/tests/fail/as_changeset_bad_options.rs similarity index 100% rename from diesel_compile_tests/tests/ui/as_changeset_bad_options.rs rename to diesel_compile_tests/tests/fail/as_changeset_bad_options.rs diff --git a/diesel_compile_tests/tests/ui/as_changeset_bad_options.stderr b/diesel_compile_tests/tests/fail/as_changeset_bad_options.stderr similarity index 96% rename from diesel_compile_tests/tests/ui/as_changeset_bad_options.stderr rename to diesel_compile_tests/tests/fail/as_changeset_bad_options.stderr index 8e400aae3bfd..1d25bc3545b3 100644 --- a/diesel_compile_tests/tests/ui/as_changeset_bad_options.stderr +++ b/diesel_compile_tests/tests/fail/as_changeset_bad_options.stderr @@ -33,6 +33,3 @@ error: `changeset_options` must be in the form `changeset_options(...)` | 53 | #[changeset_options] | ^^^^^^^^^^^^^^^^^ - -error: aborting due to 6 previous errors - diff --git a/diesel_compile_tests/tests/ui/as_changeset_bad_primary_key_syntax.rs b/diesel_compile_tests/tests/fail/as_changeset_bad_primary_key_syntax.rs similarity index 100% rename from diesel_compile_tests/tests/ui/as_changeset_bad_primary_key_syntax.rs rename to diesel_compile_tests/tests/fail/as_changeset_bad_primary_key_syntax.rs diff --git a/diesel_compile_tests/tests/ui/as_changeset_bad_primary_key_syntax.stderr b/diesel_compile_tests/tests/fail/as_changeset_bad_primary_key_syntax.stderr similarity index 86% rename from diesel_compile_tests/tests/ui/as_changeset_bad_primary_key_syntax.stderr rename to diesel_compile_tests/tests/fail/as_changeset_bad_primary_key_syntax.stderr index 35df9b5f5e5c..e62374b6e223 100644 --- a/diesel_compile_tests/tests/ui/as_changeset_bad_primary_key_syntax.stderr +++ b/diesel_compile_tests/tests/fail/as_changeset_bad_primary_key_syntax.stderr @@ -17,7 +17,3 @@ error[E0433]: failed to resolve: use of undeclared type or module `user_forms` | ^^^^^^^^ use of undeclared type or module `user_forms` | = note: this error originates in a derive macro (in Nightly builds, run with -Z macro-backtrace for more info) - -error: aborting due to 3 previous errors - -For more information about this error, try `rustc --explain E0433`. diff --git a/diesel_compile_tests/tests/ui/as_changeset_deprecated_column_name.rs b/diesel_compile_tests/tests/fail/as_changeset_deprecated_column_name.rs similarity index 67% rename from diesel_compile_tests/tests/ui/as_changeset_deprecated_column_name.rs rename to diesel_compile_tests/tests/fail/as_changeset_deprecated_column_name.rs index 168cce78f6b7..3002378a9024 100644 --- a/diesel_compile_tests/tests/ui/as_changeset_deprecated_column_name.rs +++ b/diesel_compile_tests/tests/fail/as_changeset_deprecated_column_name.rs @@ -16,4 +16,7 @@ struct UserForm { name: String, } -fn main() {} +fn main() { + // Workaround for https://github.com/dtolnay/trybuild/issues/8 + compile_error!("warnings"); +} diff --git a/diesel_compile_tests/tests/ui/as_changeset_deprecated_column_name.stderr b/diesel_compile_tests/tests/fail/as_changeset_deprecated_column_name.stderr similarity index 73% rename from diesel_compile_tests/tests/ui/as_changeset_deprecated_column_name.stderr rename to diesel_compile_tests/tests/fail/as_changeset_deprecated_column_name.stderr index 6fab5ba4d013..f8e5f036125b 100644 --- a/diesel_compile_tests/tests/ui/as_changeset_deprecated_column_name.stderr +++ b/diesel_compile_tests/tests/fail/as_changeset_deprecated_column_name.stderr @@ -10,5 +10,8 @@ warning: The form `column_name(value)` is deprecated. Use `column_name = "value" 15 | #[column_name(name)] | ^^^^^^^^^^^^^^^^^ -warning: 2 warnings emitted - +error: warnings + --> $DIR/as_changeset_deprecated_column_name.rs:21:5 + | +21 | compile_error!("warnings"); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/diesel_compile_tests/tests/ui/as_changeset_missing_column_name_tuple_struct.rs b/diesel_compile_tests/tests/fail/as_changeset_missing_column_name_tuple_struct.rs similarity index 94% rename from diesel_compile_tests/tests/ui/as_changeset_missing_column_name_tuple_struct.rs rename to diesel_compile_tests/tests/fail/as_changeset_missing_column_name_tuple_struct.rs index d135e76ae048..b30fbb942960 100644 --- a/diesel_compile_tests/tests/ui/as_changeset_missing_column_name_tuple_struct.rs +++ b/diesel_compile_tests/tests/fail/as_changeset_missing_column_name_tuple_struct.rs @@ -12,3 +12,5 @@ table! { #[derive(AsChangeset)] #[table_name = "users"] struct User(i32, #[column_name = "name"] String, String); + +fn main() {} diff --git a/diesel_compile_tests/tests/ui/as_changeset_missing_column_name_tuple_struct.stderr b/diesel_compile_tests/tests/fail/as_changeset_missing_column_name_tuple_struct.stderr similarity index 69% rename from diesel_compile_tests/tests/ui/as_changeset_missing_column_name_tuple_struct.stderr rename to diesel_compile_tests/tests/fail/as_changeset_missing_column_name_tuple_struct.stderr index 704206bb9af3..fed8bc12ebc2 100644 --- a/diesel_compile_tests/tests/ui/as_changeset_missing_column_name_tuple_struct.stderr +++ b/diesel_compile_tests/tests/fail/as_changeset_missing_column_name_tuple_struct.stderr @@ -33,20 +33,3 @@ error[E0425]: cannot find value `unknown_column` in module `users` | 14 | struct User(i32, #[column_name = "name"] String, String); | ^^^^^^ not found in `users` - -error[E0601]: `main` function not found in crate `as_changeset_missing_column_name_tuple_struct` - --> $DIR/as_changeset_missing_column_name_tuple_struct.rs:1:1 - | -1 | / #[macro_use] -2 | | extern crate diesel; -3 | | -4 | | table! { -... | -13 | | #[table_name = "users"] -14 | | struct User(i32, #[column_name = "name"] String, String); - | |_________________________________________________________^ consider adding a `main` function to `$DIR/as_changeset_missing_column_name_tuple_struct.rs` - -error: aborting due to 7 previous errors - -Some errors have detailed explanations: E0412, E0425, E0601. -For more information about an error, try `rustc --explain E0412`. diff --git a/diesel_compile_tests/tests/ui/as_changeset_missing_table_import.rs b/diesel_compile_tests/tests/fail/as_changeset_missing_table_import.rs similarity index 100% rename from diesel_compile_tests/tests/ui/as_changeset_missing_table_import.rs rename to diesel_compile_tests/tests/fail/as_changeset_missing_table_import.rs diff --git a/diesel_compile_tests/tests/ui/as_changeset_missing_table_import.stderr b/diesel_compile_tests/tests/fail/as_changeset_missing_table_import.stderr similarity index 85% rename from diesel_compile_tests/tests/ui/as_changeset_missing_table_import.stderr rename to diesel_compile_tests/tests/fail/as_changeset_missing_table_import.stderr index 70690415b6a3..20c35f9325ce 100644 --- a/diesel_compile_tests/tests/ui/as_changeset_missing_table_import.stderr +++ b/diesel_compile_tests/tests/fail/as_changeset_missing_table_import.stderr @@ -13,7 +13,3 @@ error[E0433]: failed to resolve: use of undeclared type or module `users` | ^^^^^^^ use of undeclared type or module `users` | = note: this error originates in a derive macro (in Nightly builds, run with -Z macro-backtrace for more info) - -error: aborting due to 2 previous errors - -For more information about this error, try `rustc --explain E0433`. diff --git a/diesel_compile_tests/tests/ui/as_changeset_on_non_struct.rs b/diesel_compile_tests/tests/fail/as_changeset_on_non_struct.rs similarity index 93% rename from diesel_compile_tests/tests/ui/as_changeset_on_non_struct.rs rename to diesel_compile_tests/tests/fail/as_changeset_on_non_struct.rs index 33323715f2c7..50150f44343d 100644 --- a/diesel_compile_tests/tests/ui/as_changeset_on_non_struct.rs +++ b/diesel_compile_tests/tests/fail/as_changeset_on_non_struct.rs @@ -12,3 +12,5 @@ table! { #[derive(AsChangeset)] #[table_name = "users"] enum User {} + +fn main() {} diff --git a/diesel_compile_tests/tests/fail/as_changeset_on_non_struct.stderr b/diesel_compile_tests/tests/fail/as_changeset_on_non_struct.stderr new file mode 100644 index 000000000000..cb40883230f0 --- /dev/null +++ b/diesel_compile_tests/tests/fail/as_changeset_on_non_struct.stderr @@ -0,0 +1,7 @@ +error: This derive can only be used on structs + --> $DIR/as_changeset_on_non_struct.rs:12:10 + | +12 | #[derive(AsChangeset)] + | ^^^^^^^^^^^ + | + = note: this error originates in a derive macro (in Nightly builds, run with -Z macro-backtrace for more info) diff --git a/diesel_compile_tests/tests/ui/as_changeset_struct_with_only_primary_key.rs b/diesel_compile_tests/tests/fail/as_changeset_struct_with_only_primary_key.rs similarity index 95% rename from diesel_compile_tests/tests/ui/as_changeset_struct_with_only_primary_key.rs rename to diesel_compile_tests/tests/fail/as_changeset_struct_with_only_primary_key.rs index 6babc28ebfc4..8e44f71ceed6 100644 --- a/diesel_compile_tests/tests/ui/as_changeset_struct_with_only_primary_key.rs +++ b/diesel_compile_tests/tests/fail/as_changeset_struct_with_only_primary_key.rs @@ -19,3 +19,5 @@ struct Foo1 { struct Foo2 { id: i32, } + +fn main() {} diff --git a/diesel_compile_tests/tests/ui/as_changeset_struct_with_only_primary_key.stderr b/diesel_compile_tests/tests/fail/as_changeset_struct_with_only_primary_key.stderr similarity index 62% rename from diesel_compile_tests/tests/ui/as_changeset_struct_with_only_primary_key.stderr rename to diesel_compile_tests/tests/fail/as_changeset_struct_with_only_primary_key.stderr index 22e6886b34a0..9f61dfb31308 100644 --- a/diesel_compile_tests/tests/ui/as_changeset_struct_with_only_primary_key.stderr +++ b/diesel_compile_tests/tests/fail/as_changeset_struct_with_only_primary_key.stderr @@ -8,18 +8,6 @@ error: Deriving `AsChangeset` on a structure that only contains the primary key = note: `#[derive(AsChangeset)]` never changes the primary key of a row. = note: this error originates in a derive macro (in Nightly builds, run with -Z macro-backtrace for more info) -error[E0601]: `main` function not found in crate `as_changeset_struct_with_only_primary_key` - --> $DIR/as_changeset_struct_with_only_primary_key.rs:1:1 - | -1 | / #[macro_use] extern crate diesel; -2 | | -3 | | table! { -4 | | foo { -... | -20 | | id: i32, -21 | | } - | |_^ consider adding a `main` function to `$DIR/as_changeset_struct_with_only_primary_key.rs` - error[E0277]: the trait bound `(): diesel::AsChangeset` is not satisfied --> $DIR/as_changeset_struct_with_only_primary_key.rs:17:10 | @@ -27,8 +15,3 @@ error[E0277]: the trait bound `(): diesel::AsChangeset` is not satisfied | ^^^^^^^^^^^ the trait `diesel::AsChangeset` is not implemented for `()` | = note: this error originates in a derive macro (in Nightly builds, run with -Z macro-backtrace for more info) - -error: aborting due to 3 previous errors - -Some errors have detailed explanations: E0277, E0601. -For more information about an error, try `rustc --explain E0277`. diff --git a/diesel_compile_tests/tests/ui/as_expression_bad_sql_type.rs b/diesel_compile_tests/tests/fail/as_expression_bad_sql_type.rs similarity index 93% rename from diesel_compile_tests/tests/ui/as_expression_bad_sql_type.rs rename to diesel_compile_tests/tests/fail/as_expression_bad_sql_type.rs index 89157079f73a..a708307c0fc4 100644 --- a/diesel_compile_tests/tests/ui/as_expression_bad_sql_type.rs +++ b/diesel_compile_tests/tests/fail/as_expression_bad_sql_type.rs @@ -1,4 +1,3 @@ -#[macro_use] extern crate diesel; use diesel::expression::AsExpression; diff --git a/diesel_compile_tests/tests/ui/as_expression_bad_sql_type.stderr b/diesel_compile_tests/tests/fail/as_expression_bad_sql_type.stderr similarity index 62% rename from diesel_compile_tests/tests/ui/as_expression_bad_sql_type.stderr rename to diesel_compile_tests/tests/fail/as_expression_bad_sql_type.stderr index 1506dd4420e6..329d9b557555 100644 --- a/diesel_compile_tests/tests/ui/as_expression_bad_sql_type.stderr +++ b/diesel_compile_tests/tests/fail/as_expression_bad_sql_type.stderr @@ -1,26 +1,23 @@ error: `sql_type` must be in the form `sql_type = "value"` - --> $DIR/as_expression_bad_sql_type.rs:6:3 + --> $DIR/as_expression_bad_sql_type.rs:5:3 | -6 | #[sql_type(Foo)] +5 | #[sql_type(Foo)] | ^^^^^^^^^^^^^ error: `sql_type` must be in the form `sql_type = "value"` - --> $DIR/as_expression_bad_sql_type.rs:7:3 + --> $DIR/as_expression_bad_sql_type.rs:6:3 | -7 | #[sql_type] +6 | #[sql_type] | ^^^^^^^^ error: Invalid Rust type - --> $DIR/as_expression_bad_sql_type.rs:8:14 + --> $DIR/as_expression_bad_sql_type.rs:7:14 | -8 | #[sql_type = "@%&&*"] +7 | #[sql_type = "@%&&*"] | ^^^^^^^ error: Invalid Rust type - --> $DIR/as_expression_bad_sql_type.rs:9:14 + --> $DIR/as_expression_bad_sql_type.rs:8:14 | -9 | #[sql_type = "1omg"] +8 | #[sql_type = "1omg"] | ^^^^^^ - -error: aborting due to 4 previous errors - diff --git a/diesel_compile_tests/tests/ui/belongs_to_incorrect_lifetime_syntax.rs b/diesel_compile_tests/tests/fail/belongs_to_incorrect_lifetime_syntax.rs similarity index 91% rename from diesel_compile_tests/tests/ui/belongs_to_incorrect_lifetime_syntax.rs rename to diesel_compile_tests/tests/fail/belongs_to_incorrect_lifetime_syntax.rs index 2e7adc3cdefd..c2546e1706a3 100644 --- a/diesel_compile_tests/tests/ui/belongs_to_incorrect_lifetime_syntax.rs +++ b/diesel_compile_tests/tests/fail/belongs_to_incorrect_lifetime_syntax.rs @@ -1,4 +1,5 @@ -#[macro_use] extern crate diesel; +#[macro_use] +extern crate diesel; table! { foo { @@ -20,7 +21,6 @@ struct Foo<'a> { _marker: ::std::marker::PhantomData<&'a ()>, } - #[derive(Associations)] #[belongs_to(parent = "Foo<'a>")] struct Bar { diff --git a/diesel_compile_tests/tests/ui/belongs_to_incorrect_lifetime_syntax.stderr b/diesel_compile_tests/tests/fail/belongs_to_incorrect_lifetime_syntax.stderr similarity index 73% rename from diesel_compile_tests/tests/ui/belongs_to_incorrect_lifetime_syntax.stderr rename to diesel_compile_tests/tests/fail/belongs_to_incorrect_lifetime_syntax.stderr index 23d0e4e2fdd4..deefdb9fae2e 100644 --- a/diesel_compile_tests/tests/ui/belongs_to_incorrect_lifetime_syntax.stderr +++ b/diesel_compile_tests/tests/fail/belongs_to_incorrect_lifetime_syntax.stderr @@ -5,7 +5,3 @@ error[E0261]: use of undeclared lifetime name `'a` | - help: consider introducing lifetime `'a` here: `'a,` 25 | #[belongs_to(parent = "Foo<'a>")] | ^^^^^^^^^ undeclared lifetime - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0261`. diff --git a/diesel_compile_tests/tests/ui/belongs_to_invalid_option_syntax.rs b/diesel_compile_tests/tests/fail/belongs_to_invalid_option_syntax.rs similarity index 100% rename from diesel_compile_tests/tests/ui/belongs_to_invalid_option_syntax.rs rename to diesel_compile_tests/tests/fail/belongs_to_invalid_option_syntax.rs diff --git a/diesel_compile_tests/tests/ui/belongs_to_invalid_option_syntax.stderr b/diesel_compile_tests/tests/fail/belongs_to_invalid_option_syntax.stderr similarity index 96% rename from diesel_compile_tests/tests/ui/belongs_to_invalid_option_syntax.stderr rename to diesel_compile_tests/tests/fail/belongs_to_invalid_option_syntax.stderr index b85aa9a528c6..ce2f5207f065 100644 --- a/diesel_compile_tests/tests/ui/belongs_to_invalid_option_syntax.stderr +++ b/diesel_compile_tests/tests/fail/belongs_to_invalid_option_syntax.stderr @@ -47,6 +47,3 @@ to | 35 | #[belongs_to(Baz, foreign_key = "bar_id", random_option)] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -error: aborting due to 5 previous errors; 2 warnings emitted - diff --git a/diesel_compile_tests/tests/ui/belongs_to_missing_foreign_key_column.rs b/diesel_compile_tests/tests/fail/belongs_to_missing_foreign_key_column.rs similarity index 100% rename from diesel_compile_tests/tests/ui/belongs_to_missing_foreign_key_column.rs rename to diesel_compile_tests/tests/fail/belongs_to_missing_foreign_key_column.rs diff --git a/diesel_compile_tests/tests/ui/belongs_to_missing_foreign_key_column.stderr b/diesel_compile_tests/tests/fail/belongs_to_missing_foreign_key_column.stderr similarity index 92% rename from diesel_compile_tests/tests/ui/belongs_to_missing_foreign_key_column.stderr rename to diesel_compile_tests/tests/fail/belongs_to_missing_foreign_key_column.stderr index e82241f82dcb..846a5fda5088 100644 --- a/diesel_compile_tests/tests/ui/belongs_to_missing_foreign_key_column.stderr +++ b/diesel_compile_tests/tests/fail/belongs_to_missing_foreign_key_column.stderr @@ -53,8 +53,3 @@ error[E0425]: cannot find value `bar_id` in module `foo` | ^^^^^^^^ not found in `foo` | = note: this error originates in a derive macro (in Nightly builds, run with -Z macro-backtrace for more info) - -error: aborting due to 8 previous errors - -Some errors have detailed explanations: E0412, E0425. -For more information about an error, try `rustc --explain E0412`. diff --git a/diesel_compile_tests/tests/ui/belongs_to_missing_foreign_key_field.rs b/diesel_compile_tests/tests/fail/belongs_to_missing_foreign_key_field.rs similarity index 100% rename from diesel_compile_tests/tests/ui/belongs_to_missing_foreign_key_field.rs rename to diesel_compile_tests/tests/fail/belongs_to_missing_foreign_key_field.rs diff --git a/diesel_compile_tests/tests/ui/belongs_to_missing_foreign_key_field.stderr b/diesel_compile_tests/tests/fail/belongs_to_missing_foreign_key_field.stderr similarity index 95% rename from diesel_compile_tests/tests/ui/belongs_to_missing_foreign_key_field.stderr rename to diesel_compile_tests/tests/fail/belongs_to_missing_foreign_key_field.stderr index 0bc028fa0754..db866421c9f0 100644 --- a/diesel_compile_tests/tests/ui/belongs_to_missing_foreign_key_field.stderr +++ b/diesel_compile_tests/tests/fail/belongs_to_missing_foreign_key_field.stderr @@ -25,6 +25,3 @@ error: No field with column name bar_id | ^^^^^^^^ | = note: this error originates in a derive macro (in Nightly builds, run with -Z macro-backtrace for more info) - -error: aborting due to 4 previous errors - diff --git a/diesel_compile_tests/tests/ui/belongs_to_missing_parent_import.rs b/diesel_compile_tests/tests/fail/belongs_to_missing_parent_import.rs similarity index 100% rename from diesel_compile_tests/tests/ui/belongs_to_missing_parent_import.rs rename to diesel_compile_tests/tests/fail/belongs_to_missing_parent_import.rs diff --git a/diesel_compile_tests/tests/ui/belongs_to_missing_parent_import.stderr b/diesel_compile_tests/tests/fail/belongs_to_missing_parent_import.stderr similarity index 62% rename from diesel_compile_tests/tests/ui/belongs_to_missing_parent_import.stderr rename to diesel_compile_tests/tests/fail/belongs_to_missing_parent_import.stderr index ee78be359114..315d8e3ceb42 100644 --- a/diesel_compile_tests/tests/ui/belongs_to_missing_parent_import.stderr +++ b/diesel_compile_tests/tests/fail/belongs_to_missing_parent_import.stderr @@ -3,7 +3,3 @@ error[E0412]: cannot find type `Bar` in this scope | 12 | #[belongs_to(Bar)] | ^^^ not found in this scope - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0412`. diff --git a/diesel_compile_tests/tests/ui/belongs_to_second_parent.rs b/diesel_compile_tests/tests/fail/belongs_to_second_parent.rs similarity index 78% rename from diesel_compile_tests/tests/ui/belongs_to_second_parent.rs rename to diesel_compile_tests/tests/fail/belongs_to_second_parent.rs index b046ae5dc01d..b3cb24f6afeb 100644 --- a/diesel_compile_tests/tests/ui/belongs_to_second_parent.rs +++ b/diesel_compile_tests/tests/fail/belongs_to_second_parent.rs @@ -32,4 +32,7 @@ struct Foo { bar_id: i32, } -fn main() {} +fn main() { + // Workaround for https://github.com/dtolnay/trybuild/issues/8 + compile_error!("warnings"); +} diff --git a/diesel_compile_tests/tests/ui/belongs_to_second_parent.stderr b/diesel_compile_tests/tests/fail/belongs_to_second_parent.stderr similarity index 61% rename from diesel_compile_tests/tests/ui/belongs_to_second_parent.stderr rename to diesel_compile_tests/tests/fail/belongs_to_second_parent.stderr index 97b729a1f763..5c4e1f116521 100644 --- a/diesel_compile_tests/tests/ui/belongs_to_second_parent.stderr +++ b/diesel_compile_tests/tests/fail/belongs_to_second_parent.stderr @@ -8,5 +8,8 @@ to 29 | #[belongs_to(Bar, Baz)] | ^^^^^^^^^^^^^^^^^^^^ -warning: 1 warning emitted - +error: warnings + --> $DIR/belongs_to_second_parent.rs:37:5 + | +37 | compile_error!("warnings"); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/diesel_compile_tests/tests/compile-fail/boxed_queries_and_group_by.rs b/diesel_compile_tests/tests/fail/boxed_queries_and_group_by.rs similarity index 84% rename from diesel_compile_tests/tests/compile-fail/boxed_queries_and_group_by.rs rename to diesel_compile_tests/tests/fail/boxed_queries_and_group_by.rs index 030dd67069af..310c1878c9ed 100644 --- a/diesel_compile_tests/tests/compile-fail/boxed_queries_and_group_by.rs +++ b/diesel_compile_tests/tests/fail/boxed_queries_and_group_by.rs @@ -1,4 +1,3 @@ -#[macro_use] extern crate diesel; use diesel::*; @@ -20,8 +19,6 @@ table! { joinable!(posts -> users (user_id)); fn main() { - use diesel::dsl::*; - let conn = PgConnection::establish("connection-url").unwrap(); // a boxed query with group by just works @@ -56,21 +53,17 @@ fn main() { // cannot box a query with default select clause + a group by clause users::table.group_by(users::name).into_boxed(); - //~^ ERROR BoxedDsl users::table .group_by(users::name) .select(users::id) - //~^ ERROR IsContainedInGroupBy .into_boxed(); - //~^ ERROR BoxedDsl users::table .group_by(users::name) .select(users::name) .into_boxed() .select(users::id) - //~^ ERROR IsContainedInGroupBy .load::(&conn); users::table @@ -78,23 +71,17 @@ fn main() { .select(users::name) .into_boxed() .inner_join(posts::table) - //~^ ERROR Table - //~| mismatched types .load::(&conn); let mut a = users::table.into_boxed(); // this is a different type now a = users::table.group_by(users::id).into_boxed(); - //~^ ERROR mismatched types // you cannot call group by after boxing users::table .into_boxed() .group_by(users::id) - //~^ ERROR type mismatch - //~| ERROR Table - //~| ERROR GroupByDsl .select(users::name) .load::(&conn); } diff --git a/diesel_compile_tests/tests/fail/boxed_queries_and_group_by.stderr b/diesel_compile_tests/tests/fail/boxed_queries_and_group_by.stderr new file mode 100644 index 000000000000..bf7f2f32918c --- /dev/null +++ b/diesel_compile_tests/tests/fail/boxed_queries_and_group_by.stderr @@ -0,0 +1,89 @@ +error[E0277]: the trait bound `diesel::query_builder::SelectStatement, diesel::query_builder::group_by_clause::GroupByClause>: diesel::query_dsl::boxed_dsl::BoxedDsl<'_, _>` is not satisfied + --> $DIR/boxed_queries_and_group_by.rs:55:40 + | +55 | users::table.group_by(users::name).into_boxed(); + | ^^^^^^^^^^ the trait `diesel::query_dsl::boxed_dsl::BoxedDsl<'_, _>` is not implemented for `diesel::query_builder::SelectStatement, diesel::query_builder::group_by_clause::GroupByClause>` + | + = help: the following implementations were found: + as diesel::query_dsl::boxed_dsl::BoxedDsl<'a, DB>> + +error[E0271]: type mismatch resolving `>::Output == diesel::expression::is_contained_in_group_by::Yes` + --> $DIR/boxed_queries_and_group_by.rs:59:10 + | +59 | .select(users::id) + | ^^^^^^ expected struct `diesel::expression::is_contained_in_group_by::No`, found struct `diesel::expression::is_contained_in_group_by::Yes` + | + = note: required because of the requirements on the impl of `diesel::expression::ValidGrouping` for `users::columns::id` + = note: required because of the requirements on the impl of `diesel::query_dsl::select_dsl::SelectDsl` for `diesel::query_builder::SelectStatement, diesel::query_builder::group_by_clause::GroupByClause>` + +error[E0277]: the trait bound `diesel::query_builder::SelectStatement, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause, diesel::query_builder::group_by_clause::GroupByClause>: diesel::query_dsl::boxed_dsl::BoxedDsl<'_, _>` is not satisfied + --> $DIR/boxed_queries_and_group_by.rs:60:10 + | +60 | .into_boxed(); + | ^^^^^^^^^^ the trait `diesel::query_dsl::boxed_dsl::BoxedDsl<'_, _>` is not implemented for `diesel::query_builder::SelectStatement, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause, diesel::query_builder::group_by_clause::GroupByClause>` + | + = help: the following implementations were found: + as diesel::query_dsl::boxed_dsl::BoxedDsl<'a, DB>> + +error[E0271]: type mismatch resolving `>::Output == diesel::expression::is_contained_in_group_by::Yes` + --> $DIR/boxed_queries_and_group_by.rs:66:10 + | +66 | .select(users::id) + | ^^^^^^ expected struct `diesel::expression::is_contained_in_group_by::No`, found struct `diesel::expression::is_contained_in_group_by::Yes` + | + = note: required because of the requirements on the impl of `diesel::expression::ValidGrouping` for `users::columns::id` + = note: required because of the requirements on the impl of `diesel::query_dsl::select_dsl::SelectDsl` for `diesel::query_builder::BoxedSelectStatement<'_, diesel::sql_types::Text, users::table, _, users::columns::name>` + +error[E0277]: the trait bound `diesel::query_builder::BoxedSelectStatement<'_, diesel::sql_types::Text, users::table, _, users::columns::name>: diesel::Table` is not satisfied + --> $DIR/boxed_queries_and_group_by.rs:73:10 + | +73 | .inner_join(posts::table) + | ^^^^^^^^^^ the trait `diesel::Table` is not implemented for `diesel::query_builder::BoxedSelectStatement<'_, diesel::sql_types::Text, users::table, _, users::columns::name>` + | + = note: required because of the requirements on the impl of `diesel::JoinTo>` for `diesel::query_builder::BoxedSelectStatement<'_, diesel::sql_types::Text, users::table, _, users::columns::name>` + = note: required because of the requirements on the impl of `diesel::query_dsl::JoinWithImplicitOnClause, diesel::query_source::joins::Inner>` for `diesel::query_builder::BoxedSelectStatement<'_, diesel::sql_types::Text, users::table, _, users::columns::name>` + +error[E0308]: mismatched types + --> $DIR/boxed_queries_and_group_by.rs:73:21 + | +73 | .inner_join(posts::table) + | ^^^^^^^^^^^^ expected struct `diesel::query_source::joins::OnClauseWrapper`, found struct `posts::table` + | + = note: expected struct `diesel::query_source::joins::OnClauseWrapper<_, _>` + found struct `posts::table` + +error[E0308]: mismatched types + --> $DIR/boxed_queries_and_group_by.rs:79:9 + | +79 | a = users::table.group_by(users::id).into_boxed(); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `()`, found struct `users::columns::id` + | + = note: expected struct `diesel::query_builder::BoxedSelectStatement<'_, _, _, _, ()>` + found struct `diesel::query_builder::BoxedSelectStatement<'_, _, _, _, users::columns::id>` + +error[E0271]: type mismatch resolving ` as diesel::query_builder::AsQuery>::Query == diesel::query_builder::SelectStatement>` + --> $DIR/boxed_queries_and_group_by.rs:84:10 + | +84 | .group_by(users::id) + | ^^^^^^^^ expected struct `diesel::query_builder::BoxedSelectStatement`, found struct `diesel::query_builder::SelectStatement` + | + = note: expected type `diesel::query_builder::BoxedSelectStatement<'_, _, _, _, _>` + found struct `diesel::query_builder::SelectStatement>` + = note: required because of the requirements on the impl of `diesel::query_dsl::methods::GroupByDsl<_>` for `diesel::query_builder::BoxedSelectStatement<'_, (diesel::sql_types::Integer, diesel::sql_types::Text), users::table, _>` + +error[E0277]: the trait bound `diesel::query_builder::BoxedSelectStatement<'_, (diesel::sql_types::Integer, diesel::sql_types::Text), users::table, _>: diesel::Table` is not satisfied + --> $DIR/boxed_queries_and_group_by.rs:84:10 + | +84 | .group_by(users::id) + | ^^^^^^^^ the trait `diesel::Table` is not implemented for `diesel::query_builder::BoxedSelectStatement<'_, (diesel::sql_types::Integer, diesel::sql_types::Text), users::table, _>` + | + = note: required because of the requirements on the impl of `diesel::query_dsl::methods::GroupByDsl<_>` for `diesel::query_builder::BoxedSelectStatement<'_, (diesel::sql_types::Integer, diesel::sql_types::Text), users::table, _>` + +error[E0277]: the trait bound `diesel::query_builder::SelectStatement>: diesel::query_dsl::methods::GroupByDsl<_>` is not satisfied + --> $DIR/boxed_queries_and_group_by.rs:84:10 + | +84 | .group_by(users::id) + | ^^^^^^^^ the trait `diesel::query_dsl::methods::GroupByDsl<_>` is not implemented for `diesel::query_builder::SelectStatement>` + | + = help: the following implementations were found: + as diesel::query_dsl::methods::GroupByDsl> diff --git a/diesel_compile_tests/tests/compile-fail/boxed_queries_must_be_used_with_proper_connection.rs b/diesel_compile_tests/tests/fail/boxed_queries_must_be_used_with_proper_connection.rs similarity index 85% rename from diesel_compile_tests/tests/compile-fail/boxed_queries_must_be_used_with_proper_connection.rs rename to diesel_compile_tests/tests/fail/boxed_queries_must_be_used_with_proper_connection.rs index 818568324866..917cc3cd9021 100644 --- a/diesel_compile_tests/tests/compile-fail/boxed_queries_must_be_used_with_proper_connection.rs +++ b/diesel_compile_tests/tests/fail/boxed_queries_must_be_used_with_proper_connection.rs @@ -1,8 +1,7 @@ -#[macro_use] extern crate diesel; -use diesel::*; use diesel::pg::Pg; +use diesel::*; table! { users { @@ -13,5 +12,4 @@ table! { fn main() { let connection = SqliteConnection::establish("").unwrap(); users::table.into_boxed::().load::<(i32,)>(&connection); - //~^ ERROR type mismatch } diff --git a/diesel_compile_tests/tests/fail/boxed_queries_must_be_used_with_proper_connection.stderr b/diesel_compile_tests/tests/fail/boxed_queries_must_be_used_with_proper_connection.stderr new file mode 100644 index 000000000000..28dbe5a81d41 --- /dev/null +++ b/diesel_compile_tests/tests/fail/boxed_queries_must_be_used_with_proper_connection.stderr @@ -0,0 +1,7 @@ +error[E0271]: type mismatch resolving `::Backend == diesel::pg::Pg` + --> $DIR/boxed_queries_must_be_used_with_proper_connection.rs:14:37 + | +14 | users::table.into_boxed::().load::<(i32,)>(&connection); + | ^^^^ expected struct `diesel::sqlite::Sqlite`, found struct `diesel::pg::Pg` + | + = note: required because of the requirements on the impl of `diesel::query_dsl::LoadQuery` for `diesel::query_builder::BoxedSelectStatement<'_, (diesel::sql_types::Integer,), users::table, diesel::pg::Pg>` diff --git a/diesel_compile_tests/tests/compile-fail/boxed_queries_require_selectable_expression_for_filter.rs b/diesel_compile_tests/tests/fail/boxed_queries_require_selectable_expression_for_filter.rs similarity index 86% rename from diesel_compile_tests/tests/compile-fail/boxed_queries_require_selectable_expression_for_filter.rs rename to diesel_compile_tests/tests/fail/boxed_queries_require_selectable_expression_for_filter.rs index 1f20a5ff3535..76edb587677c 100644 --- a/diesel_compile_tests/tests/compile-fail/boxed_queries_require_selectable_expression_for_filter.rs +++ b/diesel_compile_tests/tests/fail/boxed_queries_require_selectable_expression_for_filter.rs @@ -1,4 +1,3 @@ -#[macro_use] extern crate diesel; use diesel::*; @@ -20,5 +19,4 @@ table! { fn main() { users::table.into_boxed::().filter(posts::title.eq("Hello")); - //~^ ERROR AppearsInFromClause } diff --git a/diesel_compile_tests/tests/fail/boxed_queries_require_selectable_expression_for_filter.stderr b/diesel_compile_tests/tests/fail/boxed_queries_require_selectable_expression_for_filter.stderr new file mode 100644 index 000000000000..a03723c87203 --- /dev/null +++ b/diesel_compile_tests/tests/fail/boxed_queries_require_selectable_expression_for_filter.stderr @@ -0,0 +1,12 @@ +error[E0277]: the trait bound `users::table: diesel::query_source::AppearsInFromClause` is not satisfied + --> $DIR/boxed_queries_require_selectable_expression_for_filter.rs:21:37 + | +21 | users::table.into_boxed::().filter(posts::title.eq("Hello")); + | ^^^^^^ the trait `diesel::query_source::AppearsInFromClause` is not implemented for `users::table` + | + = help: the following implementations were found: + > + = note: required because of the requirements on the impl of `diesel::AppearsOnTable` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::AppearsOnTable` for `diesel::expression::operators::Eq>` + = note: required because of the requirements on the impl of `diesel::AppearsOnTable` for `diesel::expression::grouped::Grouped>>` + = note: required because of the requirements on the impl of `diesel::query_dsl::filter_dsl::FilterDsl>>>` for `diesel::query_builder::BoxedSelectStatement<'_, (diesel::sql_types::Integer, diesel::sql_types::Text), users::table, diesel::pg::Pg>` diff --git a/diesel_compile_tests/tests/compile-fail/boxed_queries_require_selectable_expression_for_order.rs b/diesel_compile_tests/tests/fail/boxed_queries_require_selectable_expression_for_order.rs similarity index 85% rename from diesel_compile_tests/tests/compile-fail/boxed_queries_require_selectable_expression_for_order.rs rename to diesel_compile_tests/tests/fail/boxed_queries_require_selectable_expression_for_order.rs index 2ddab6abdef0..253c973e3b5f 100644 --- a/diesel_compile_tests/tests/compile-fail/boxed_queries_require_selectable_expression_for_order.rs +++ b/diesel_compile_tests/tests/fail/boxed_queries_require_selectable_expression_for_order.rs @@ -1,8 +1,7 @@ -#[macro_use] extern crate diesel; -use diesel::*; use diesel::pg::Pg; +use diesel::*; table! { users { @@ -20,5 +19,4 @@ table! { fn main() { users::table.into_boxed::().order(posts::title.desc()); - //~^ ERROR AppearsInFromClause } diff --git a/diesel_compile_tests/tests/fail/boxed_queries_require_selectable_expression_for_order.stderr b/diesel_compile_tests/tests/fail/boxed_queries_require_selectable_expression_for_order.stderr new file mode 100644 index 000000000000..f2a70520dee3 --- /dev/null +++ b/diesel_compile_tests/tests/fail/boxed_queries_require_selectable_expression_for_order.stderr @@ -0,0 +1,11 @@ +error[E0277]: the trait bound `users::table: diesel::query_source::AppearsInFromClause` is not satisfied + --> $DIR/boxed_queries_require_selectable_expression_for_order.rs:21:37 + | +21 | users::table.into_boxed::().order(posts::title.desc()); + | ^^^^^ the trait `diesel::query_source::AppearsInFromClause` is not implemented for `users::table` + | + = help: the following implementations were found: + > + = note: required because of the requirements on the impl of `diesel::AppearsOnTable` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::AppearsOnTable` for `diesel::expression::operators::Desc` + = note: required because of the requirements on the impl of `diesel::query_dsl::methods::OrderDsl>` for `diesel::query_builder::BoxedSelectStatement<'_, (diesel::sql_types::Integer, diesel::sql_types::Text), users::table, diesel::pg::Pg>` diff --git a/diesel_compile_tests/tests/compile-fail/cannot_join_to_non_joinable_table.rs b/diesel_compile_tests/tests/fail/cannot_join_to_non_joinable_table.rs similarity index 90% rename from diesel_compile_tests/tests/compile-fail/cannot_join_to_non_joinable_table.rs rename to diesel_compile_tests/tests/fail/cannot_join_to_non_joinable_table.rs index 2a279c2129f9..a57b3a84ba43 100644 --- a/diesel_compile_tests/tests/compile-fail/cannot_join_to_non_joinable_table.rs +++ b/diesel_compile_tests/tests/fail/cannot_join_to_non_joinable_table.rs @@ -1,4 +1,3 @@ -#[macro_use] extern crate diesel; use diesel::*; @@ -29,13 +28,10 @@ allow_tables_to_appear_in_same_query!(comments, posts, users); fn main() { let _ = users::table.inner_join(posts::table); - //~^ ERROR 0277 let _ = users::table.left_outer_join(posts::table); - //~^ ERROR 0277 // Sanity check to make sure the error is when users // become involved let join = posts::table.inner_join(comments::table); let _ = users::table.inner_join(join); - //~^ ERROR 0277 } diff --git a/diesel_compile_tests/tests/fail/cannot_join_to_non_joinable_table.stderr b/diesel_compile_tests/tests/fail/cannot_join_to_non_joinable_table.stderr new file mode 100644 index 000000000000..1c6638e4420d --- /dev/null +++ b/diesel_compile_tests/tests/fail/cannot_join_to_non_joinable_table.stderr @@ -0,0 +1,40 @@ +error[E0277]: the trait bound `users::table: diesel::JoinTo` is not satisfied + --> $DIR/cannot_join_to_non_joinable_table.rs:30:26 + | +30 | let _ = users::table.inner_join(posts::table); + | ^^^^^^^^^^ the trait `diesel::JoinTo` is not implemented for `users::table` + | + = help: the following implementations were found: + >> + >> + >> + >> + = note: required because of the requirements on the impl of `diesel::query_dsl::JoinWithImplicitOnClause` for `users::table` + +error[E0277]: the trait bound `users::table: diesel::JoinTo` is not satisfied + --> $DIR/cannot_join_to_non_joinable_table.rs:31:26 + | +31 | let _ = users::table.left_outer_join(posts::table); + | ^^^^^^^^^^^^^^^ the trait `diesel::JoinTo` is not implemented for `users::table` + | + = help: the following implementations were found: + >> + >> + >> + >> + = note: required because of the requirements on the impl of `diesel::query_dsl::JoinWithImplicitOnClause` for `users::table` + +error[E0277]: the trait bound `posts::table: diesel::JoinTo` is not satisfied + --> $DIR/cannot_join_to_non_joinable_table.rs:36:37 + | +36 | let _ = users::table.inner_join(join); + | ^^^^ the trait `diesel::JoinTo` is not implemented for `posts::table` + | + = help: the following implementations were found: + > + >> + >> + >> + >> + = note: required because of the requirements on the impl of `diesel::JoinTo` for `diesel::query_source::joins::Join` + = note: required because of the requirements on the impl of `diesel::query_dsl::JoinWithImplicitOnClause, diesel::expression::grouped::Grouped, diesel::expression::nullable::Nullable>>>>, diesel::query_source::joins::Inner>` for `users::table` diff --git a/diesel_compile_tests/tests/compile-fail/cannot_load_default_select_with_group_by.rs b/diesel_compile_tests/tests/fail/cannot_load_default_select_with_group_by.rs similarity index 79% rename from diesel_compile_tests/tests/compile-fail/cannot_load_default_select_with_group_by.rs rename to diesel_compile_tests/tests/fail/cannot_load_default_select_with_group_by.rs index 84394e4f9990..2a7ae36ada04 100644 --- a/diesel_compile_tests/tests/compile-fail/cannot_load_default_select_with_group_by.rs +++ b/diesel_compile_tests/tests/fail/cannot_load_default_select_with_group_by.rs @@ -1,7 +1,5 @@ -#[macro_use] extern crate diesel; -use diesel::dsl::count; use diesel::*; table! { @@ -16,5 +14,4 @@ fn main() { let _ = users::table .group_by(users::name) .load::<(i32, String)>(&conn); - //~^ ERROR IsContainedInGroupBy } diff --git a/diesel_compile_tests/tests/fail/cannot_load_default_select_with_group_by.stderr b/diesel_compile_tests/tests/fail/cannot_load_default_select_with_group_by.stderr new file mode 100644 index 000000000000..5508095ea7da --- /dev/null +++ b/diesel_compile_tests/tests/fail/cannot_load_default_select_with_group_by.stderr @@ -0,0 +1,10 @@ +error[E0271]: type mismatch resolving `>::Output == diesel::expression::is_contained_in_group_by::Yes` + --> $DIR/cannot_load_default_select_with_group_by.rs:16:10 + | +16 | .load::<(i32, String)>(&conn); + | ^^^^ expected struct `diesel::expression::is_contained_in_group_by::No`, found struct `diesel::expression::is_contained_in_group_by::Yes` + | + = note: required because of the requirements on the impl of `diesel::expression::ValidGrouping` for `users::columns::id` + = note: required because of the requirements on the impl of `diesel::expression::ValidGrouping` for `(users::columns::id, users::columns::name)` + = note: required because of the requirements on the impl of `diesel::query_builder::Query` for `diesel::query_builder::SelectStatement, diesel::query_builder::group_by_clause::GroupByClause>` + = note: required because of the requirements on the impl of `diesel::query_dsl::LoadQuery<_, (i32, std::string::String)>` for `diesel::query_builder::SelectStatement, diesel::query_builder::group_by_clause::GroupByClause>` diff --git a/diesel_compile_tests/tests/compile-fail/cannot_mix_aggregate_and_non_aggregate_selects.rs b/diesel_compile_tests/tests/fail/cannot_mix_aggregate_and_non_aggregate_selects.rs similarity index 84% rename from diesel_compile_tests/tests/compile-fail/cannot_mix_aggregate_and_non_aggregate_selects.rs rename to diesel_compile_tests/tests/fail/cannot_mix_aggregate_and_non_aggregate_selects.rs index c664dfeeda1f..d44fe0069691 100644 --- a/diesel_compile_tests/tests/compile-fail/cannot_mix_aggregate_and_non_aggregate_selects.rs +++ b/diesel_compile_tests/tests/fail/cannot_mix_aggregate_and_non_aggregate_selects.rs @@ -1,4 +1,3 @@ -#[macro_use] extern crate diesel; use diesel::dsl::count_star; @@ -19,11 +18,8 @@ fn main() { use diesel::dsl::max; let source = users.select((id, count_star())); - //~^ ERROR MixedAggregates let source = users.select(nullable_int_col + max(nullable_int_col)); - //~^ ERROR MixedAggregates let source = users.select(f(nullable_int_col, max(nullable_int_col))); - //~^ ERROR MixedAggregates } diff --git a/diesel_compile_tests/tests/fail/cannot_mix_aggregate_and_non_aggregate_selects.stderr b/diesel_compile_tests/tests/fail/cannot_mix_aggregate_and_non_aggregate_selects.stderr new file mode 100644 index 000000000000..f8cc62f8c12f --- /dev/null +++ b/diesel_compile_tests/tests/fail/cannot_mix_aggregate_and_non_aggregate_selects.stderr @@ -0,0 +1,36 @@ +error[E0277]: the trait bound `diesel::expression::is_aggregate::No: diesel::expression::MixedAggregates` is not satisfied + --> $DIR/cannot_mix_aggregate_and_non_aggregate_selects.rs:20:24 + | +20 | let source = users.select((id, count_star())); + | ^^^^^^ the trait `diesel::expression::MixedAggregates` is not implemented for `diesel::expression::is_aggregate::No` + | + = help: the following implementations were found: + > + > + = note: required because of the requirements on the impl of `diesel::expression::ValidGrouping<()>` for `(users::columns::id, diesel::dsl::CountStar)` + = note: required because of the requirements on the impl of `diesel::query_dsl::select_dsl::SelectDsl<(users::columns::id, diesel::dsl::CountStar)>` for `diesel::query_builder::SelectStatement` + +error[E0277]: the trait bound `diesel::expression::is_aggregate::No: diesel::expression::MixedAggregates` is not satisfied + --> $DIR/cannot_mix_aggregate_and_non_aggregate_selects.rs:22:24 + | +22 | let source = users.select(nullable_int_col + max(nullable_int_col)); + | ^^^^^^ the trait `diesel::expression::MixedAggregates` is not implemented for `diesel::expression::is_aggregate::No` + | + = help: the following implementations were found: + > + > + = note: required because of the requirements on the impl of `diesel::expression::ValidGrouping<()>` for `diesel::expression::ops::Add>` + = note: required because of the requirements on the impl of `diesel::query_dsl::select_dsl::SelectDsl>>` for `diesel::query_builder::SelectStatement` + +error[E0277]: the trait bound `diesel::expression::is_aggregate::No: diesel::expression::MixedAggregates` is not satisfied + --> $DIR/cannot_mix_aggregate_and_non_aggregate_selects.rs:24:24 + | +24 | let source = users.select(f(nullable_int_col, max(nullable_int_col))); + | ^^^^^^ the trait `diesel::expression::MixedAggregates` is not implemented for `diesel::expression::is_aggregate::No` + | + = help: the following implementations were found: + > + > + = note: required because of the requirements on the impl of `diesel::expression::ValidGrouping<()>` for `f::__Derived>` + = note: required because of the requirements on the impl of `diesel::expression::ValidGrouping<()>` for `f::f>` + = note: required because of the requirements on the impl of `diesel::query_dsl::select_dsl::SelectDsl>>` for `diesel::query_builder::SelectStatement` diff --git a/diesel_compile_tests/tests/compile-fail/cannot_pass_aggregate_to_where.rs b/diesel_compile_tests/tests/fail/cannot_pass_aggregate_to_where.rs similarity index 82% rename from diesel_compile_tests/tests/compile-fail/cannot_pass_aggregate_to_where.rs rename to diesel_compile_tests/tests/fail/cannot_pass_aggregate_to_where.rs index e8f1f917a3b1..1a6e91fb44f9 100644 --- a/diesel_compile_tests/tests/compile-fail/cannot_pass_aggregate_to_where.rs +++ b/diesel_compile_tests/tests/fail/cannot_pass_aggregate_to_where.rs @@ -1,8 +1,7 @@ -#[macro_use] extern crate diesel; -use diesel::*; use diesel::dsl::count; +use diesel::*; table! { users { @@ -14,5 +13,4 @@ fn main() { use self::users::dsl::*; let source = users.filter(count(id).gt(3)); - //~^ ERROR MixedAggregates } diff --git a/diesel_compile_tests/tests/fail/cannot_pass_aggregate_to_where.stderr b/diesel_compile_tests/tests/fail/cannot_pass_aggregate_to_where.stderr new file mode 100644 index 000000000000..6c03f1f897bf --- /dev/null +++ b/diesel_compile_tests/tests/fail/cannot_pass_aggregate_to_where.stderr @@ -0,0 +1,10 @@ +error[E0277]: the trait bound `diesel::expression::is_aggregate::Yes: diesel::expression::MixedAggregates` is not satisfied + --> $DIR/cannot_pass_aggregate_to_where.rs:15:24 + | +15 | let source = users.filter(count(id).gt(3)); + | ^^^^^^ the trait `diesel::expression::MixedAggregates` is not implemented for `diesel::expression::is_aggregate::Yes` + | + = help: the following implementations were found: + > + > + = note: required because of the requirements on the impl of `diesel::query_dsl::filter_dsl::FilterDsl>, diesel::expression::bound::Bound>>>` for `diesel::query_builder::SelectStatement` diff --git a/diesel_compile_tests/tests/compile-fail/cannot_update_target_with_methods_other_than_filter_called.rs b/diesel_compile_tests/tests/fail/cannot_update_target_with_methods_other_than_filter_called.rs similarity index 73% rename from diesel_compile_tests/tests/compile-fail/cannot_update_target_with_methods_other_than_filter_called.rs rename to diesel_compile_tests/tests/fail/cannot_update_target_with_methods_other_than_filter_called.rs index fbbd69e04b34..5c243141a27d 100644 --- a/diesel_compile_tests/tests/compile-fail/cannot_update_target_with_methods_other_than_filter_called.rs +++ b/diesel_compile_tests/tests/fail/cannot_update_target_with_methods_other_than_filter_called.rs @@ -1,4 +1,3 @@ -#[macro_use] extern crate diesel; use diesel::*; @@ -14,9 +13,5 @@ fn main() { use self::users::dsl::*; let command = update(users.select(id)).set(id.eq(1)); - //~^ ERROR E0277 - //~| ERROR E0277 let command = update(users.order(id)).set(id.eq(1)); - //~^ ERROR E0277 - //~| ERROR E0277 } diff --git a/diesel_compile_tests/tests/fail/cannot_update_target_with_methods_other_than_filter_called.stderr b/diesel_compile_tests/tests/fail/cannot_update_target_with_methods_other_than_filter_called.stderr new file mode 100644 index 000000000000..73e4cbb3360e --- /dev/null +++ b/diesel_compile_tests/tests/fail/cannot_update_target_with_methods_other_than_filter_called.stderr @@ -0,0 +1,41 @@ +error[E0277]: the trait bound `diesel::query_builder::SelectStatement>: diesel::Identifiable` is not satisfied + --> $DIR/cannot_update_target_with_methods_other_than_filter_called.rs:15:26 + | +15 | let command = update(users.select(id)).set(id.eq(1)); + | ^^^^^^^^^^^^^^^^ the trait `diesel::Identifiable` is not implemented for `diesel::query_builder::SelectStatement>` + | + ::: $WORKSPACE/diesel/src/query_builder/functions.rs + | + | pub fn update(source: T) -> UpdateStatement { + | ---------------- required by this bound in `diesel::update` + | + = note: required because of the requirements on the impl of `diesel::query_builder::IntoUpdateTarget` for `diesel::query_builder::SelectStatement>` + +error[E0277]: the trait bound `diesel::query_builder::SelectStatement>: diesel::Identifiable` is not satisfied + --> $DIR/cannot_update_target_with_methods_other_than_filter_called.rs:16:26 + | +16 | let command = update(users.order(id)).set(id.eq(1)); + | ^^^^^^^^^^^^^^^ the trait `diesel::Identifiable` is not implemented for `diesel::query_builder::SelectStatement>` + | + ::: $WORKSPACE/diesel/src/query_builder/functions.rs + | + | pub fn update(source: T) -> UpdateStatement { + | ---------------- required by this bound in `diesel::update` + | + = note: required because of the requirements on the impl of `diesel::query_builder::IntoUpdateTarget` for `diesel::query_builder::SelectStatement>` + +error[E0277]: the trait bound `diesel::query_builder::SelectStatement>: diesel::Identifiable` is not satisfied + --> $DIR/cannot_update_target_with_methods_other_than_filter_called.rs:15:19 + | +15 | let command = update(users.select(id)).set(id.eq(1)); + | ^^^^^^ the trait `diesel::Identifiable` is not implemented for `diesel::query_builder::SelectStatement>` + | + = note: required because of the requirements on the impl of `diesel::query_builder::IntoUpdateTarget` for `diesel::query_builder::SelectStatement>` + +error[E0277]: the trait bound `diesel::query_builder::SelectStatement>: diesel::Identifiable` is not satisfied + --> $DIR/cannot_update_target_with_methods_other_than_filter_called.rs:16:19 + | +16 | let command = update(users.order(id)).set(id.eq(1)); + | ^^^^^^ the trait `diesel::Identifiable` is not implemented for `diesel::query_builder::SelectStatement>` + | + = note: required because of the requirements on the impl of `diesel::query_builder::IntoUpdateTarget` for `diesel::query_builder::SelectStatement>` diff --git a/diesel_compile_tests/tests/compile-fail/cannot_use_expression_methods_on_tuples.rs b/diesel_compile_tests/tests/fail/cannot_use_expression_methods_on_tuples.rs similarity index 74% rename from diesel_compile_tests/tests/compile-fail/cannot_use_expression_methods_on_tuples.rs rename to diesel_compile_tests/tests/fail/cannot_use_expression_methods_on_tuples.rs index a463b3ce6396..3a3d9a5fc51a 100644 --- a/diesel_compile_tests/tests/compile-fail/cannot_use_expression_methods_on_tuples.rs +++ b/diesel_compile_tests/tests/fail/cannot_use_expression_methods_on_tuples.rs @@ -1,4 +1,4 @@ -#[macro_use] extern crate diesel; +extern crate diesel; use diesel::prelude::*; @@ -16,7 +16,5 @@ fn main() { users.filter(id.eq_any(users.select(id))); users.filter((id, name).is_not_null()); - //~^ ERROR no method named `is_not_null` found users.filter((id, name).eq_any(users.find(1))); - //~^ ERROR no method named `eq_any` found } diff --git a/diesel_compile_tests/tests/fail/cannot_use_expression_methods_on_tuples.stderr b/diesel_compile_tests/tests/fail/cannot_use_expression_methods_on_tuples.stderr new file mode 100644 index 000000000000..855812088652 --- /dev/null +++ b/diesel_compile_tests/tests/fail/cannot_use_expression_methods_on_tuples.stderr @@ -0,0 +1,27 @@ +error[E0599]: no method named `is_not_null` found for tuple `(users::columns::id, users::columns::name)` in the current scope + --> $DIR/cannot_use_expression_methods_on_tuples.rs:18:29 + | +18 | users.filter((id, name).is_not_null()); + | ^^^^^^^^^^^ method not found in `(users::columns::id, users::columns::name)` + | + = note: the method `is_not_null` exists but the following trait bounds were not satisfied: + `(diesel::sql_types::Integer, diesel::sql_types::Text): diesel::sql_types::SingleValue` + which is required by `(users::columns::id, users::columns::name): diesel::ExpressionMethods` + `(diesel::sql_types::Integer, diesel::sql_types::Text): diesel::sql_types::SingleValue` + which is required by `&(users::columns::id, users::columns::name): diesel::ExpressionMethods` + `&mut (users::columns::id, users::columns::name): diesel::Expression` + which is required by `&mut (users::columns::id, users::columns::name): diesel::ExpressionMethods` + +error[E0599]: no method named `eq_any` found for tuple `(users::columns::id, users::columns::name)` in the current scope + --> $DIR/cannot_use_expression_methods_on_tuples.rs:19:29 + | +19 | users.filter((id, name).eq_any(users.find(1))); + | ^^^^^^ method not found in `(users::columns::id, users::columns::name)` + | + = note: the method `eq_any` exists but the following trait bounds were not satisfied: + `(diesel::sql_types::Integer, diesel::sql_types::Text): diesel::sql_types::SingleValue` + which is required by `(users::columns::id, users::columns::name): diesel::ExpressionMethods` + `(diesel::sql_types::Integer, diesel::sql_types::Text): diesel::sql_types::SingleValue` + which is required by `&(users::columns::id, users::columns::name): diesel::ExpressionMethods` + `&mut (users::columns::id, users::columns::name): diesel::Expression` + which is required by `&mut (users::columns::id, users::columns::name): diesel::ExpressionMethods` diff --git a/diesel_compile_tests/tests/compile-fail/codegen_does_not_add_save_changes_method_on_structs_without_primary_key.rs b/diesel_compile_tests/tests/fail/codegen_does_not_add_save_changes_method_on_structs_without_primary_key.rs similarity index 84% rename from diesel_compile_tests/tests/compile-fail/codegen_does_not_add_save_changes_method_on_structs_without_primary_key.rs rename to diesel_compile_tests/tests/fail/codegen_does_not_add_save_changes_method_on_structs_without_primary_key.rs index bdc73c2409a2..2cdecc018527 100644 --- a/diesel_compile_tests/tests/compile-fail/codegen_does_not_add_save_changes_method_on_structs_without_primary_key.rs +++ b/diesel_compile_tests/tests/fail/codegen_does_not_add_save_changes_method_on_structs_without_primary_key.rs @@ -1,4 +1,4 @@ -#[macro_use] extern crate diesel; +extern crate diesel; use diesel::*; @@ -24,5 +24,4 @@ fn main() { hair_color: "black".to_string(), }; user.save_changes(&connection); - //~^ ERROR no method named `save_changes` found } diff --git a/diesel_compile_tests/tests/fail/codegen_does_not_add_save_changes_method_on_structs_without_primary_key.stderr b/diesel_compile_tests/tests/fail/codegen_does_not_add_save_changes_method_on_structs_without_primary_key.stderr new file mode 100644 index 000000000000..8014856271ca --- /dev/null +++ b/diesel_compile_tests/tests/fail/codegen_does_not_add_save_changes_method_on_structs_without_primary_key.stderr @@ -0,0 +1,36 @@ +error[E0599]: no method named `save_changes` found for struct `User` in the current scope + --> $DIR/codegen_does_not_add_save_changes_method_on_structs_without_primary_key.rs:26:10 + | +15 | pub struct User { + | --------------- + | | + | method `save_changes` not found for this + | doesn't satisfy `User: diesel::SaveChangesDsl<_>` + | doesn't satisfy `User: diesel::associations::HasTable` + | doesn't satisfy `User: diesel::query_builder::IntoUpdateTarget` + | doesn't satisfy `User: std::marker::Copy` +... +26 | user.save_changes(&connection); + | ^^^^^^^^^^^^ method not found in `User` + | + = note: the method `save_changes` exists but the following trait bounds were not satisfied: + `User: diesel::associations::HasTable` + which is required by `User: diesel::SaveChangesDsl<_>` + `User: std::marker::Copy` + which is required by `User: diesel::SaveChangesDsl<_>` + `User: diesel::query_builder::IntoUpdateTarget` + which is required by `User: diesel::SaveChangesDsl<_>` + `User: diesel::associations::HasTable` + which is required by `&User: diesel::SaveChangesDsl<_>` + `&User: diesel::query_builder::IntoUpdateTarget` + which is required by `&User: diesel::SaveChangesDsl<_>` + `&mut User: diesel::associations::HasTable` + which is required by `&mut User: diesel::SaveChangesDsl<_>` + `<&mut User as diesel::AsChangeset>::Target = _` + which is required by `&mut User: diesel::SaveChangesDsl<_>` + `&mut User: std::marker::Copy` + which is required by `&mut User: diesel::SaveChangesDsl<_>` + `&mut User: diesel::AsChangeset` + which is required by `&mut User: diesel::SaveChangesDsl<_>` + `&mut User: diesel::query_builder::IntoUpdateTarget` + which is required by `&mut User: diesel::SaveChangesDsl<_>` diff --git a/diesel_compile_tests/tests/compile-fail/columns_cannot_be_rhs_of_insert.rs b/diesel_compile_tests/tests/fail/columns_cannot_be_rhs_of_insert.rs similarity index 82% rename from diesel_compile_tests/tests/compile-fail/columns_cannot_be_rhs_of_insert.rs rename to diesel_compile_tests/tests/fail/columns_cannot_be_rhs_of_insert.rs index 3638c91f1cc5..741573d0b130 100644 --- a/diesel_compile_tests/tests/compile-fail/columns_cannot_be_rhs_of_insert.rs +++ b/diesel_compile_tests/tests/fail/columns_cannot_be_rhs_of_insert.rs @@ -1,8 +1,7 @@ -#[macro_use] extern crate diesel; -use diesel::*; use diesel::pg::PgConnection; +use diesel::*; table! { users { @@ -13,12 +12,11 @@ table! { } fn main() { - use users::dsl::*; + use self::users::dsl::*; let conn = PgConnection::establish("").unwrap(); insert_into(users) .values(&name.eq(hair_color)) .execute(&conn) - //~^ ERROR ColumnInsertValue .unwrap(); } diff --git a/diesel_compile_tests/tests/fail/columns_cannot_be_rhs_of_insert.stderr b/diesel_compile_tests/tests/fail/columns_cannot_be_rhs_of_insert.stderr new file mode 100644 index 000000000000..b1f75adc4fc2 --- /dev/null +++ b/diesel_compile_tests/tests/fail/columns_cannot_be_rhs_of_insert.stderr @@ -0,0 +1,12 @@ +error[E0277]: the trait bound `diesel::insertable::ColumnInsertValue: diesel::insertable::InsertValues` is not satisfied + --> $DIR/columns_cannot_be_rhs_of_insert.rs:20:10 + | +20 | .execute(&conn) + | ^^^^^^^ the trait `diesel::insertable::InsertValues` is not implemented for `diesel::insertable::ColumnInsertValue` + | + = help: the following implementations were found: + as diesel::insertable::InsertValues<::Table, DB>> + as diesel::insertable::InsertValues<::Table, diesel::sqlite::Sqlite>> + = note: required because of the requirements on the impl of `diesel::query_builder::QueryFragment<_>` for `diesel::query_builder::ValuesClause, users::table>` + = note: required because of the requirements on the impl of `diesel::query_builder::QueryFragment<_>` for `diesel::query_builder::InsertStatement, users::table>>` + = note: required because of the requirements on the impl of `diesel::query_dsl::load_dsl::ExecuteDsl<_, _>` for `diesel::query_builder::InsertStatement, users::table>>` diff --git a/diesel_compile_tests/tests/ui/combinations_require_same_sql_types.rs b/diesel_compile_tests/tests/fail/combinations_require_same_sql_types.rs similarity index 97% rename from diesel_compile_tests/tests/ui/combinations_require_same_sql_types.rs rename to diesel_compile_tests/tests/fail/combinations_require_same_sql_types.rs index 28e5e7a2707c..7b812cbe707e 100644 --- a/diesel_compile_tests/tests/ui/combinations_require_same_sql_types.rs +++ b/diesel_compile_tests/tests/fail/combinations_require_same_sql_types.rs @@ -1,4 +1,3 @@ -#[macro_use] extern crate diesel; use diesel::*; diff --git a/diesel_compile_tests/tests/ui/combinations_require_same_sql_types.stderr b/diesel_compile_tests/tests/fail/combinations_require_same_sql_types.stderr similarity index 73% rename from diesel_compile_tests/tests/ui/combinations_require_same_sql_types.stderr rename to diesel_compile_tests/tests/fail/combinations_require_same_sql_types.stderr index 3d49712915bb..4a17484e43b1 100644 --- a/diesel_compile_tests/tests/ui/combinations_require_same_sql_types.stderr +++ b/diesel_compile_tests/tests/fail/combinations_require_same_sql_types.stderr @@ -1,21 +1,17 @@ error[E0271]: type mismatch resolving `::SqlType == (diesel::sql_types::Integer, diesel::sql_types::Text)` - --> $DIR/combinations_require_same_sql_types.rs:31:26 + --> $DIR/combinations_require_same_sql_types.rs:30:26 | -31 | let _ = users::table.union(comments::table); +30 | let _ = users::table.union(comments::table); | ^^^^^ expected struct `diesel::sql_types::Integer`, found struct `diesel::sql_types::Text` | = note: expected tuple `(diesel::sql_types::Integer, diesel::sql_types::Integer)` found tuple `(diesel::sql_types::Integer, diesel::sql_types::Text)` error[E0271]: type mismatch resolving `::SqlType == (diesel::sql_types::Integer, diesel::sql_types::Text)` - --> $DIR/combinations_require_same_sql_types.rs:36:19 + --> $DIR/combinations_require_same_sql_types.rs:35:19 | -36 | let _ = union.union(comments::table); +35 | let _ = union.union(comments::table); | ^^^^^ expected struct `diesel::sql_types::Integer`, found struct `diesel::sql_types::Text` | = note: expected tuple `(diesel::sql_types::Integer, diesel::sql_types::Integer)` found tuple `(diesel::sql_types::Integer, diesel::sql_types::Text)` - -error: aborting due to 2 previous errors - -For more information about this error, try `rustc --explain E0271`. diff --git a/diesel_compile_tests/tests/compile-fail/custom_returning_requires_nonaggregate.rs b/diesel_compile_tests/tests/fail/custom_returning_requires_nonaggregate.rs similarity index 83% rename from diesel_compile_tests/tests/compile-fail/custom_returning_requires_nonaggregate.rs rename to diesel_compile_tests/tests/fail/custom_returning_requires_nonaggregate.rs index 983d58033f2a..9a13a88640aa 100644 --- a/diesel_compile_tests/tests/compile-fail/custom_returning_requires_nonaggregate.rs +++ b/diesel_compile_tests/tests/fail/custom_returning_requires_nonaggregate.rs @@ -1,4 +1,4 @@ -#[macro_use] extern crate diesel; +extern crate diesel; use diesel::*; use diesel::dsl::count; @@ -20,11 +20,9 @@ fn main() { use self::users::dsl::*; let stmt = update(users.filter(id.eq(1))).set(name.eq("Bill")).returning(count(id)); - //~^ ERROR MixedAggregates let new_user = NewUser { name: "Foobar".to_string(), }; let stmt = insert_into(users).values(&new_user).returning((name, count(name))); - //~^ ERROR MixedAggregates } diff --git a/diesel_compile_tests/tests/fail/custom_returning_requires_nonaggregate.stderr b/diesel_compile_tests/tests/fail/custom_returning_requires_nonaggregate.stderr new file mode 100644 index 000000000000..2bb502c79f78 --- /dev/null +++ b/diesel_compile_tests/tests/fail/custom_returning_requires_nonaggregate.stderr @@ -0,0 +1,22 @@ +error[E0277]: the trait bound `diesel::expression::is_aggregate::Yes: diesel::expression::MixedAggregates` is not satisfied + --> $DIR/custom_returning_requires_nonaggregate.rs:22:68 + | +22 | let stmt = update(users.filter(id.eq(1))).set(name.eq("Bill")).returning(count(id)); + | ^^^^^^^^^ the trait `diesel::expression::MixedAggregates` is not implemented for `diesel::expression::is_aggregate::Yes` + | + = help: the following implementations were found: + > + > + = note: required because of the requirements on the impl of `diesel::query_builder::Query` for `diesel::query_builder::UpdateStatement>>>, diesel::query_builder::update_statement::changeset::Assign>, diesel::query_builder::returning_clause::ReturningClause>>>` + +error[E0277]: the trait bound `diesel::expression::is_aggregate::No: diesel::expression::MixedAggregates` is not satisfied + --> $DIR/custom_returning_requires_nonaggregate.rs:27:53 + | +27 | let stmt = insert_into(users).values(&new_user).returning((name, count(name))); + | ^^^^^^^^^ the trait `diesel::expression::MixedAggregates` is not implemented for `diesel::expression::is_aggregate::No` + | + = help: the following implementations were found: + > + > + = note: required because of the requirements on the impl of `diesel::expression::ValidGrouping<()>` for `(users::columns::name, diesel::expression::count::count::count>)` + = note: required because of the requirements on the impl of `diesel::query_builder::Query` for `diesel::query_builder::InsertStatement>,), users::table>, diesel::query_builder::insert_statement::Insert, diesel::query_builder::returning_clause::ReturningClause<(users::columns::name, diesel::expression::count::count::count>)>>` diff --git a/diesel_compile_tests/tests/compile-fail/custom_returning_requires_selectable_expression.rs b/diesel_compile_tests/tests/fail/custom_returning_requires_selectable_expression.rs similarity index 79% rename from diesel_compile_tests/tests/compile-fail/custom_returning_requires_selectable_expression.rs rename to diesel_compile_tests/tests/fail/custom_returning_requires_selectable_expression.rs index 64b4554f802d..9cb14678914a 100644 --- a/diesel_compile_tests/tests/compile-fail/custom_returning_requires_selectable_expression.rs +++ b/diesel_compile_tests/tests/fail/custom_returning_requires_selectable_expression.rs @@ -1,4 +1,4 @@ -#[macro_use] extern crate diesel; +extern crate diesel; use diesel::*; @@ -26,12 +26,9 @@ fn main() { use self::users::dsl::*; let stmt = update(users.filter(id.eq(1))).set(name.eq("Bill")).returning(bad::age); - //~^ ERROR SelectableExpression let new_user = NewUser { name: "Foobar".to_string(), }; let stmt = insert_into(users).values(&new_user).returning((name, bad::age)); - //~^ ERROR SelectableExpression - //~| ERROR AppearsInFromClause } diff --git a/diesel_compile_tests/tests/fail/custom_returning_requires_selectable_expression.stderr b/diesel_compile_tests/tests/fail/custom_returning_requires_selectable_expression.stderr new file mode 100644 index 000000000000..f25d55d265dc --- /dev/null +++ b/diesel_compile_tests/tests/fail/custom_returning_requires_selectable_expression.stderr @@ -0,0 +1,41 @@ +error[E0277]: the trait bound `bad::columns::age: diesel::SelectableExpression` is not satisfied + --> $DIR/custom_returning_requires_selectable_expression.rs:28:78 + | +28 | let stmt = update(users.filter(id.eq(1))).set(name.eq("Bill")).returning(bad::age); + | ^^^^^^^^ the trait `diesel::SelectableExpression` is not implemented for `bad::columns::age` + | + = help: the following implementations were found: + > + >> + >> + >> + >> + = note: required because of the requirements on the impl of `diesel::query_builder::Query` for `diesel::query_builder::UpdateStatement>>>, diesel::query_builder::update_statement::changeset::Assign>, diesel::query_builder::returning_clause::ReturningClause>` + +error[E0277]: the trait bound `bad::columns::age: diesel::SelectableExpression` is not satisfied + --> $DIR/custom_returning_requires_selectable_expression.rs:33:63 + | +33 | let stmt = insert_into(users).values(&new_user).returning((name, bad::age)); + | ^^^^^^^^^^^^^^^^ the trait `diesel::SelectableExpression` is not implemented for `bad::columns::age` + | + = help: the following implementations were found: + > + >> + >> + >> + >> + = note: required because of the requirements on the impl of `diesel::SelectableExpression` for `(users::columns::name, bad::columns::age)` + = note: required because of the requirements on the impl of `diesel::query_builder::Query` for `diesel::query_builder::InsertStatement>,), users::table>, diesel::query_builder::insert_statement::Insert, diesel::query_builder::returning_clause::ReturningClause<(users::columns::name, bad::columns::age)>>` + +error[E0277]: the trait bound `users::table: diesel::query_source::AppearsInFromClause` is not satisfied + --> $DIR/custom_returning_requires_selectable_expression.rs:33:53 + | +33 | let stmt = insert_into(users).values(&new_user).returning((name, bad::age)); + | ^^^^^^^^^ the trait `diesel::query_source::AppearsInFromClause` is not implemented for `users::table` + | + = help: the following implementations were found: + > + = note: required because of the requirements on the impl of `diesel::AppearsOnTable` for `bad::columns::age` + = note: required because of the requirements on the impl of `diesel::AppearsOnTable` for `(users::columns::name, bad::columns::age)` + = note: required because of the requirements on the impl of `diesel::SelectableExpression` for `(users::columns::name, bad::columns::age)` + = note: required because of the requirements on the impl of `diesel::query_builder::Query` for `diesel::query_builder::InsertStatement>,), users::table>, diesel::query_builder::insert_statement::Insert, diesel::query_builder::returning_clause::ReturningClause<(users::columns::name, bad::columns::age)>>` diff --git a/diesel_compile_tests/tests/compile-fail/delete_statement_does_not_support_returning_methods_on_sqlite.rs b/diesel_compile_tests/tests/fail/delete_statement_does_not_support_returning_methods_on_sqlite.rs similarity index 81% rename from diesel_compile_tests/tests/compile-fail/delete_statement_does_not_support_returning_methods_on_sqlite.rs rename to diesel_compile_tests/tests/fail/delete_statement_does_not_support_returning_methods_on_sqlite.rs index 2088d27b5c6c..2b59277144d2 100644 --- a/diesel_compile_tests/tests/compile-fail/delete_statement_does_not_support_returning_methods_on_sqlite.rs +++ b/diesel_compile_tests/tests/fail/delete_statement_does_not_support_returning_methods_on_sqlite.rs @@ -1,4 +1,3 @@ -#[macro_use] extern crate diesel; use diesel::*; @@ -16,10 +15,8 @@ fn main() { delete(users.filter(name.eq("Bill"))) .get_result(&connection); - //~^ ERROR SupportsReturningClause delete(users.filter(name.eq("Bill"))) .returning(name) .get_result(&connection); - //~^ ERROR SupportsReturningClause } diff --git a/diesel_compile_tests/tests/fail/delete_statement_does_not_support_returning_methods_on_sqlite.stderr b/diesel_compile_tests/tests/fail/delete_statement_does_not_support_returning_methods_on_sqlite.stderr new file mode 100644 index 000000000000..dd4cd875fdf0 --- /dev/null +++ b/diesel_compile_tests/tests/fail/delete_statement_does_not_support_returning_methods_on_sqlite.stderr @@ -0,0 +1,19 @@ +error[E0277]: the trait bound `diesel::sqlite::Sqlite: diesel::backend::SupportsReturningClause` is not satisfied + --> $DIR/delete_statement_does_not_support_returning_methods_on_sqlite.rs:17:10 + | +17 | .get_result(&connection); + | ^^^^^^^^^^ the trait `diesel::backend::SupportsReturningClause` is not implemented for `diesel::sqlite::Sqlite` + | + = note: required because of the requirements on the impl of `diesel::query_builder::QueryFragment` for `diesel::query_builder::returning_clause::ReturningClause<(users::columns::id, users::columns::name)>` + = note: required because of the requirements on the impl of `diesel::query_builder::QueryFragment` for `diesel::query_builder::DeleteStatement>>>, diesel::query_builder::returning_clause::ReturningClause<(users::columns::id, users::columns::name)>>` + = note: required because of the requirements on the impl of `diesel::query_dsl::LoadQuery` for `diesel::query_builder::DeleteStatement>>>>` + +error[E0277]: the trait bound `diesel::sqlite::Sqlite: diesel::backend::SupportsReturningClause` is not satisfied + --> $DIR/delete_statement_does_not_support_returning_methods_on_sqlite.rs:21:10 + | +21 | .get_result(&connection); + | ^^^^^^^^^^ the trait `diesel::backend::SupportsReturningClause` is not implemented for `diesel::sqlite::Sqlite` + | + = note: required because of the requirements on the impl of `diesel::query_builder::QueryFragment` for `diesel::query_builder::returning_clause::ReturningClause` + = note: required because of the requirements on the impl of `diesel::query_builder::QueryFragment` for `diesel::query_builder::DeleteStatement>>>, diesel::query_builder::returning_clause::ReturningClause>` + = note: required because of the requirements on the impl of `diesel::query_dsl::LoadQuery` for `diesel::query_builder::DeleteStatement>>>, diesel::query_builder::returning_clause::ReturningClause>` diff --git a/diesel_compile_tests/tests/compile-fail/distinct_on_allows_only_fields_of_table.rs b/diesel_compile_tests/tests/fail/distinct_on_allows_only_fields_of_table.rs similarity index 79% rename from diesel_compile_tests/tests/compile-fail/distinct_on_allows_only_fields_of_table.rs rename to diesel_compile_tests/tests/fail/distinct_on_allows_only_fields_of_table.rs index a580e5a7360e..9f0954dc7ada 100644 --- a/diesel_compile_tests/tests/compile-fail/distinct_on_allows_only_fields_of_table.rs +++ b/diesel_compile_tests/tests/fail/distinct_on_allows_only_fields_of_table.rs @@ -1,4 +1,3 @@ -#[macro_use] extern crate diesel; use diesel::*; @@ -22,9 +21,6 @@ fn main() { let connection = PgConnection::establish("postgres://foo").unwrap(); users::table.distinct_on(posts::id).get_results(&connection); - //~^ ERROR SelectableExpression posts::table.distinct_on((posts::name, users::name)).get_result(&connection); - //~^ ERROR SelectableExpression - //~| ERROR AppearsInFromClause } diff --git a/diesel_compile_tests/tests/fail/distinct_on_allows_only_fields_of_table.stderr b/diesel_compile_tests/tests/fail/distinct_on_allows_only_fields_of_table.stderr new file mode 100644 index 000000000000..e8313d180e02 --- /dev/null +++ b/diesel_compile_tests/tests/fail/distinct_on_allows_only_fields_of_table.stderr @@ -0,0 +1,41 @@ +error[E0277]: the trait bound `posts::columns::id: diesel::SelectableExpression` is not satisfied + --> $DIR/distinct_on_allows_only_fields_of_table.rs:23:30 + | +23 | users::table.distinct_on(posts::id).get_results(&connection); + | ^^^^^^^^^ the trait `diesel::SelectableExpression` is not implemented for `posts::columns::id` + | + = help: the following implementations were found: + >> + >> + >> + >> + > + = note: required because of the requirements on the impl of `diesel::query_dsl::methods::DistinctOnDsl` for `users::table` + +error[E0277]: the trait bound `users::columns::name: diesel::SelectableExpression` is not satisfied + --> $DIR/distinct_on_allows_only_fields_of_table.rs:25:30 + | +25 | posts::table.distinct_on((posts::name, users::name)).get_result(&connection); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `diesel::SelectableExpression` is not implemented for `users::columns::name` + | + = help: the following implementations were found: + >> + >> + >> + >> + > + = note: required because of the requirements on the impl of `diesel::SelectableExpression` for `(posts::columns::name, users::columns::name)` + = note: required because of the requirements on the impl of `diesel::query_dsl::methods::DistinctOnDsl<(posts::columns::name, users::columns::name)>` for `posts::table` + +error[E0277]: the trait bound `posts::table: diesel::query_source::AppearsInFromClause` is not satisfied + --> $DIR/distinct_on_allows_only_fields_of_table.rs:25:18 + | +25 | posts::table.distinct_on((posts::name, users::name)).get_result(&connection); + | ^^^^^^^^^^^ the trait `diesel::query_source::AppearsInFromClause` is not implemented for `posts::table` + | + = help: the following implementations were found: + > + = note: required because of the requirements on the impl of `diesel::AppearsOnTable` for `users::columns::name` + = note: required because of the requirements on the impl of `diesel::AppearsOnTable` for `(posts::columns::name, users::columns::name)` + = note: required because of the requirements on the impl of `diesel::SelectableExpression` for `(posts::columns::name, users::columns::name)` + = note: required because of the requirements on the impl of `diesel::query_dsl::methods::DistinctOnDsl<(posts::columns::name, users::columns::name)>` for `posts::table` diff --git a/diesel_compile_tests/tests/compile-fail/distinct_on_clause_only_supported_for_pg.rs b/diesel_compile_tests/tests/fail/distinct_on_clause_only_supported_for_pg.rs similarity index 82% rename from diesel_compile_tests/tests/compile-fail/distinct_on_clause_only_supported_for_pg.rs rename to diesel_compile_tests/tests/fail/distinct_on_clause_only_supported_for_pg.rs index 0edb48621ed1..3c370678437c 100644 --- a/diesel_compile_tests/tests/compile-fail/distinct_on_clause_only_supported_for_pg.rs +++ b/diesel_compile_tests/tests/fail/distinct_on_clause_only_supported_for_pg.rs @@ -1,4 +1,3 @@ -#[macro_use] extern crate diesel; use diesel::*; @@ -15,10 +14,8 @@ fn main() { let sqlite_connection = SqliteConnection::establish(":memory:").unwrap(); users.distinct_on(name).get_results(&sqlite_connection); - //~^ ERROR Backend == diesel::pg::Pg let mysql_connection = MysqlConnection::establish("mysql://foo").unwrap(); users.distinct_on(name).get_results(&mysql_connection); - //~^ ERROR Backend == diesel::pg::Pg } diff --git a/diesel_compile_tests/tests/fail/distinct_on_clause_only_supported_for_pg.stderr b/diesel_compile_tests/tests/fail/distinct_on_clause_only_supported_for_pg.stderr new file mode 100644 index 000000000000..b2db5739b1be --- /dev/null +++ b/diesel_compile_tests/tests/fail/distinct_on_clause_only_supported_for_pg.stderr @@ -0,0 +1,15 @@ +error[E0271]: type mismatch resolving `::Backend == diesel::pg::Pg` + --> $DIR/distinct_on_clause_only_supported_for_pg.rs:16:29 + | +16 | users.distinct_on(name).get_results(&sqlite_connection); + | ^^^^^^^^^^^ expected struct `diesel::sqlite::Sqlite`, found struct `diesel::pg::Pg` + | + = note: required because of the requirements on the impl of `diesel::query_dsl::LoadQuery` for `diesel::query_builder::SelectStatement>` + +error[E0271]: type mismatch resolving `::Backend == diesel::pg::Pg` + --> $DIR/distinct_on_clause_only_supported_for_pg.rs:20:29 + | +20 | users.distinct_on(name).get_results(&mysql_connection); + | ^^^^^^^^^^^ expected struct `diesel::mysql::Mysql`, found struct `diesel::pg::Pg` + | + = note: required because of the requirements on the impl of `diesel::query_dsl::LoadQuery` for `diesel::query_builder::SelectStatement>` diff --git a/diesel_compile_tests/tests/ui/embed_and_serialize_as_cannot_be_mixed.rs b/diesel_compile_tests/tests/fail/embed_and_serialize_as_cannot_be_mixed.rs similarity index 74% rename from diesel_compile_tests/tests/ui/embed_and_serialize_as_cannot_be_mixed.rs rename to diesel_compile_tests/tests/fail/embed_and_serialize_as_cannot_be_mixed.rs index 27140e7e6fbf..7550c6ad2b66 100644 --- a/diesel_compile_tests/tests/ui/embed_and_serialize_as_cannot_be_mixed.rs +++ b/diesel_compile_tests/tests/fail/embed_and_serialize_as_cannot_be_mixed.rs @@ -19,10 +19,9 @@ struct NameAndHairColor<'a> { #[derive(Insertable)] struct User<'a> { id: i32, - #[diesel(embed, serialize_as = "SomeType")] // to test the compile error, this type doesn't need to exist + #[diesel(embed, serialize_as = "SomeType")] + // to test the compile error, this type doesn't need to exist name_and_hair_color: NameAndHairColor<'a>, } -fn main() { - -} +fn main() {} diff --git a/diesel_compile_tests/tests/ui/embed_and_serialize_as_cannot_be_mixed.stderr b/diesel_compile_tests/tests/fail/embed_and_serialize_as_cannot_be_mixed.stderr similarity index 55% rename from diesel_compile_tests/tests/ui/embed_and_serialize_as_cannot_be_mixed.stderr rename to diesel_compile_tests/tests/fail/embed_and_serialize_as_cannot_be_mixed.stderr index 527f1d865f9d..4139cbb4ba67 100644 --- a/diesel_compile_tests/tests/ui/embed_and_serialize_as_cannot_be_mixed.stderr +++ b/diesel_compile_tests/tests/fail/embed_and_serialize_as_cannot_be_mixed.stderr @@ -1,8 +1,5 @@ error: `#[diesel(embed)]` cannot be combined with `#[diesel(serialize_as)]` --> $DIR/embed_and_serialize_as_cannot_be_mixed.rs:22:7 | -22 | #[diesel(embed, serialize_as = "SomeType")] // to test the compile error, this type doesn't need to exist +22 | #[diesel(embed, serialize_as = "SomeType")] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -error: aborting due to previous error - diff --git a/diesel_compile_tests/tests/compile-fail/exists_can_only_take_subselects.rs b/diesel_compile_tests/tests/fail/exists_can_only_take_subselects.rs similarity index 83% rename from diesel_compile_tests/tests/compile-fail/exists_can_only_take_subselects.rs rename to diesel_compile_tests/tests/fail/exists_can_only_take_subselects.rs index 2c1fed3ec366..be572208577d 100644 --- a/diesel_compile_tests/tests/compile-fail/exists_can_only_take_subselects.rs +++ b/diesel_compile_tests/tests/fail/exists_can_only_take_subselects.rs @@ -1,4 +1,4 @@ -#[macro_use] extern crate diesel; +extern crate diesel; use diesel::*; use diesel::dsl::exists; @@ -21,7 +21,5 @@ fn main() { users::table.filter(exists(posts::table.select(posts::id))).execute(&conn).unwrap(); users::table.filter(exists(true)); - //~^ ERROR SelectQuery users::table.filter(exists(users::id)); - //~^ ERROR E0277 } diff --git a/diesel_compile_tests/tests/fail/exists_can_only_take_subselects.stderr b/diesel_compile_tests/tests/fail/exists_can_only_take_subselects.stderr new file mode 100644 index 000000000000..d4d1a41f1b8f --- /dev/null +++ b/diesel_compile_tests/tests/fail/exists_can_only_take_subselects.stderr @@ -0,0 +1,22 @@ +error[E0277]: the trait bound `bool: diesel::query_builder::SelectQuery` is not satisfied + --> $DIR/exists_can_only_take_subselects.rs:23:25 + | +23 | users::table.filter(exists(true)); + | ^^^^^^^^^^^^ the trait `diesel::query_builder::SelectQuery` is not implemented for `bool` + | + = note: required because of the requirements on the impl of `diesel::Expression` for `diesel::expression::subselect::Subselect` + = note: required because of the requirements on the impl of `diesel::Expression` for `diesel::expression::exists::Exists` + = note: required because of the requirements on the impl of `diesel::query_dsl::filter_dsl::FilterDsl>` for `diesel::query_builder::SelectStatement` + +error[E0277]: the trait bound `users::columns::id: diesel::Expression` is not satisfied + --> $DIR/exists_can_only_take_subselects.rs:24:25 + | +24 | users::table.filter(exists(users::id)); + | ^^^^^^^^^^^^^^^^^ + | | + | expected an implementor of trait `diesel::Expression` + | help: consider borrowing here: `&exists(users::id)` + | + = note: required because of the requirements on the impl of `diesel::Expression` for `diesel::expression::subselect::Subselect` + = note: required because of the requirements on the impl of `diesel::Expression` for `diesel::expression::exists::Exists` + = note: required because of the requirements on the impl of `diesel::query_dsl::filter_dsl::FilterDsl>` for `diesel::query_builder::SelectStatement` diff --git a/diesel_compile_tests/tests/compile-fail/expressions_can_only_be_compared_for_equality_to_expressions_of_same_type.rs b/diesel_compile_tests/tests/fail/expressions_can_only_be_compared_for_equality_to_expressions_of_same_type.rs similarity index 77% rename from diesel_compile_tests/tests/compile-fail/expressions_can_only_be_compared_for_equality_to_expressions_of_same_type.rs rename to diesel_compile_tests/tests/fail/expressions_can_only_be_compared_for_equality_to_expressions_of_same_type.rs index 36d8a1681cee..105ddbbfe935 100644 --- a/diesel_compile_tests/tests/compile-fail/expressions_can_only_be_compared_for_equality_to_expressions_of_same_type.rs +++ b/diesel_compile_tests/tests/fail/expressions_can_only_be_compared_for_equality_to_expressions_of_same_type.rs @@ -1,4 +1,3 @@ -#[macro_use] extern crate diesel; use diesel::*; @@ -14,7 +13,5 @@ fn main() { use self::users::dsl::*; let pred = id.eq("string"); - //~^ ERROR E0277 let pred = id.eq(name); - //~^ ERROR type mismatch } diff --git a/diesel_compile_tests/tests/fail/expressions_can_only_be_compared_for_equality_to_expressions_of_same_type.stderr b/diesel_compile_tests/tests/fail/expressions_can_only_be_compared_for_equality_to_expressions_of_same_type.stderr new file mode 100644 index 000000000000..e7bd2a4d7dd1 --- /dev/null +++ b/diesel_compile_tests/tests/fail/expressions_can_only_be_compared_for_equality_to_expressions_of_same_type.stderr @@ -0,0 +1,16 @@ +error[E0277]: the trait bound `str: diesel::Expression` is not satisfied + --> $DIR/expressions_can_only_be_compared_for_equality_to_expressions_of_same_type.rs:15:22 + | +15 | let pred = id.eq("string"); + | ^^^^^^^^ the trait `diesel::Expression` is not implemented for `str` + | + = note: required because of the requirements on the impl of `diesel::Expression` for `&str` + = note: required because of the requirements on the impl of `diesel::expression::AsExpression` for `&str` + +error[E0271]: type mismatch resolving `::SqlType == diesel::sql_types::Integer` + --> $DIR/expressions_can_only_be_compared_for_equality_to_expressions_of_same_type.rs:16:19 + | +16 | let pred = id.eq(name); + | ^^ expected struct `diesel::sql_types::Text`, found struct `diesel::sql_types::Integer` + | + = note: required because of the requirements on the impl of `diesel::expression::as_expression_impl::AsExpressionHelper` for `diesel::expression::as_expression_impl::ExpressionImplHelper` diff --git a/diesel_compile_tests/tests/compile-fail/filter_cannot_take_comparison_for_columns_from_another_table.rs b/diesel_compile_tests/tests/fail/filter_cannot_take_comparison_for_columns_from_another_table.rs similarity index 77% rename from diesel_compile_tests/tests/compile-fail/filter_cannot_take_comparison_for_columns_from_another_table.rs rename to diesel_compile_tests/tests/fail/filter_cannot_take_comparison_for_columns_from_another_table.rs index 9d4cdf89b670..dd33e8102b70 100644 --- a/diesel_compile_tests/tests/compile-fail/filter_cannot_take_comparison_for_columns_from_another_table.rs +++ b/diesel_compile_tests/tests/fail/filter_cannot_take_comparison_for_columns_from_another_table.rs @@ -1,4 +1,4 @@ -#[macro_use] extern crate diesel; +extern crate diesel; use diesel::*; use diesel::pg::Pg; @@ -30,16 +30,13 @@ fn main() { let _ = users::table.filter(posts::id.eq(1)) .load::(&conn); - //~^ ERROR type mismatch resolving `>::Count == diesel::query_source::Once` let _ = users::table .into_boxed::() .filter(posts::id.eq(1)); - //~^ ERROR AppearsInFromClause let _ = users::table.filter(posts::id.eq(1)) .into_boxed::(); - //~^ ERROR BoxedDsl // FIXME: It'd be great if this mentioned `AppearsInFromClause` instead... let _ = users::table.filter(users::name.eq(posts::title)) @@ -48,11 +45,9 @@ fn main() { let _ = users::table.into_boxed::() .filter(users::name.eq(posts::title)); - //~^ ERROR AppearsInFromClause let _ = users::table .filter(users::name.eq(posts::title)) .into_boxed::(); - //~^ ERROR BoxedDsl // FIXME: It'd be great if this mentioned `AppearsInFromClause` instead... } diff --git a/diesel_compile_tests/tests/fail/filter_cannot_take_comparison_for_columns_from_another_table.stderr b/diesel_compile_tests/tests/fail/filter_cannot_take_comparison_for_columns_from_another_table.stderr new file mode 100644 index 000000000000..2e6f81c64346 --- /dev/null +++ b/diesel_compile_tests/tests/fail/filter_cannot_take_comparison_for_columns_from_another_table.stderr @@ -0,0 +1,65 @@ +error[E0271]: type mismatch resolving `>::Count == diesel::query_source::Once` + --> $DIR/filter_cannot_take_comparison_for_columns_from_another_table.rs:32:10 + | +32 | .load::(&conn); + | ^^^^ expected struct `diesel::query_source::Never`, found struct `diesel::query_source::Once` + | + = note: required because of the requirements on the impl of `diesel::AppearsOnTable` for `posts::columns::id` + = note: required because of the requirements on the impl of `diesel::AppearsOnTable` for `diesel::expression::operators::Eq>` + = note: required because of the requirements on the impl of `diesel::AppearsOnTable` for `diesel::expression::grouped::Grouped>>` + = note: required because of the requirements on the impl of `diesel::query_builder::where_clause::ValidWhereClause` for `diesel::query_builder::where_clause::WhereClause>>>` + = note: required because of the requirements on the impl of `diesel::query_builder::Query` for `diesel::query_builder::SelectStatement>>>>` + = note: required because of the requirements on the impl of `diesel::query_dsl::LoadQuery<_, User>` for `diesel::query_builder::SelectStatement>>>>` + +error[E0271]: type mismatch resolving `>::Count == diesel::query_source::Once` + --> $DIR/filter_cannot_take_comparison_for_columns_from_another_table.rs:36:10 + | +36 | .filter(posts::id.eq(1)); + | ^^^^^^ expected struct `diesel::query_source::Never`, found struct `diesel::query_source::Once` + | + = note: required because of the requirements on the impl of `diesel::AppearsOnTable` for `posts::columns::id` + = note: required because of the requirements on the impl of `diesel::AppearsOnTable` for `diesel::expression::operators::Eq>` + = note: required because of the requirements on the impl of `diesel::AppearsOnTable` for `diesel::expression::grouped::Grouped>>` + = note: required because of the requirements on the impl of `diesel::query_dsl::filter_dsl::FilterDsl>>>` for `diesel::query_builder::BoxedSelectStatement<'_, (diesel::sql_types::Integer, diesel::sql_types::Text), users::table, diesel::pg::Pg>` + +error[E0277]: the trait bound `diesel::query_builder::SelectStatement>>>>: diesel::query_dsl::boxed_dsl::BoxedDsl<'_, diesel::pg::Pg>` is not satisfied + --> $DIR/filter_cannot_take_comparison_for_columns_from_another_table.rs:39:10 + | +39 | .into_boxed::(); + | ^^^^^^^^^^ the trait `diesel::query_dsl::boxed_dsl::BoxedDsl<'_, diesel::pg::Pg>` is not implemented for `diesel::query_builder::SelectStatement>>>>` + | + = help: the following implementations were found: + as diesel::query_dsl::boxed_dsl::BoxedDsl<'a, DB>> + +error[E0271]: type mismatch resolving `>::Count == diesel::query_source::Once` + --> $DIR/filter_cannot_take_comparison_for_columns_from_another_table.rs:43:10 + | +43 | .load::(&conn); + | ^^^^ expected struct `diesel::query_source::Never`, found struct `diesel::query_source::Once` + | + = note: required because of the requirements on the impl of `diesel::AppearsOnTable` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::AppearsOnTable` for `diesel::expression::operators::Eq` + = note: required because of the requirements on the impl of `diesel::AppearsOnTable` for `diesel::expression::grouped::Grouped>` + = note: required because of the requirements on the impl of `diesel::query_builder::where_clause::ValidWhereClause` for `diesel::query_builder::where_clause::WhereClause>>` + = note: required because of the requirements on the impl of `diesel::query_builder::Query` for `diesel::query_builder::SelectStatement>>>` + = note: required because of the requirements on the impl of `diesel::query_dsl::LoadQuery<_, User>` for `diesel::query_builder::SelectStatement>>>` + +error[E0271]: type mismatch resolving `>::Count == diesel::query_source::Once` + --> $DIR/filter_cannot_take_comparison_for_columns_from_another_table.rs:47:10 + | +47 | .filter(users::name.eq(posts::title)); + | ^^^^^^ expected struct `diesel::query_source::Never`, found struct `diesel::query_source::Once` + | + = note: required because of the requirements on the impl of `diesel::AppearsOnTable` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::AppearsOnTable` for `diesel::expression::operators::Eq` + = note: required because of the requirements on the impl of `diesel::AppearsOnTable` for `diesel::expression::grouped::Grouped>` + = note: required because of the requirements on the impl of `diesel::query_dsl::filter_dsl::FilterDsl>>` for `diesel::query_builder::BoxedSelectStatement<'_, (diesel::sql_types::Integer, diesel::sql_types::Text), users::table, diesel::pg::Pg>` + +error[E0277]: the trait bound `diesel::query_builder::SelectStatement>>>: diesel::query_dsl::boxed_dsl::BoxedDsl<'_, diesel::pg::Pg>` is not satisfied + --> $DIR/filter_cannot_take_comparison_for_columns_from_another_table.rs:51:10 + | +51 | .into_boxed::(); + | ^^^^^^^^^^ the trait `diesel::query_dsl::boxed_dsl::BoxedDsl<'_, diesel::pg::Pg>` is not implemented for `diesel::query_builder::SelectStatement>>>` + | + = help: the following implementations were found: + as diesel::query_dsl::boxed_dsl::BoxedDsl<'a, DB>> diff --git a/diesel_compile_tests/tests/compile-fail/filter_requires_bool_nonaggregate_expression.rs b/diesel_compile_tests/tests/fail/filter_requires_bool_nonaggregate_expression.rs similarity index 62% rename from diesel_compile_tests/tests/compile-fail/filter_requires_bool_nonaggregate_expression.rs rename to diesel_compile_tests/tests/fail/filter_requires_bool_nonaggregate_expression.rs index 83e7e8046293..af55be19f9e5 100644 --- a/diesel_compile_tests/tests/compile-fail/filter_requires_bool_nonaggregate_expression.rs +++ b/diesel_compile_tests/tests/fail/filter_requires_bool_nonaggregate_expression.rs @@ -1,4 +1,3 @@ -#[macro_use] extern crate diesel; use diesel::*; @@ -14,7 +13,5 @@ fn main() { use diesel::dsl::sum; let _ = users::table.filter(users::name); - //~^ ERROR the trait bound `diesel::sql_types::Text: diesel::sql_types::BoolOrNullableBool` is not satisfied let _ = users::table.filter(sum(users::id).eq(1)); - //~^ ERROR MixedAggregates } diff --git a/diesel_compile_tests/tests/fail/filter_requires_bool_nonaggregate_expression.stderr b/diesel_compile_tests/tests/fail/filter_requires_bool_nonaggregate_expression.stderr new file mode 100644 index 000000000000..e9344f0609f9 --- /dev/null +++ b/diesel_compile_tests/tests/fail/filter_requires_bool_nonaggregate_expression.stderr @@ -0,0 +1,18 @@ +error[E0277]: the trait bound `diesel::sql_types::Text: diesel::sql_types::BoolOrNullableBool` is not satisfied + --> $DIR/filter_requires_bool_nonaggregate_expression.rs:15:26 + | +15 | let _ = users::table.filter(users::name); + | ^^^^^^ the trait `diesel::sql_types::BoolOrNullableBool` is not implemented for `diesel::sql_types::Text` + | + = note: required because of the requirements on the impl of `diesel::query_dsl::filter_dsl::FilterDsl` for `diesel::query_builder::SelectStatement` + +error[E0277]: the trait bound `diesel::expression::is_aggregate::Yes: diesel::expression::MixedAggregates` is not satisfied + --> $DIR/filter_requires_bool_nonaggregate_expression.rs:16:26 + | +16 | let _ = users::table.filter(sum(users::id).eq(1)); + | ^^^^^^ the trait `diesel::expression::MixedAggregates` is not implemented for `diesel::expression::is_aggregate::Yes` + | + = help: the following implementations were found: + > + > + = note: required because of the requirements on the impl of `diesel::query_dsl::filter_dsl::FilterDsl>, diesel::expression::bound::Bound, i64>>>>` for `diesel::query_builder::SelectStatement` diff --git a/diesel_compile_tests/tests/compile-fail/find_requires_correct_type.rs b/diesel_compile_tests/tests/fail/find_requires_correct_type.rs similarity index 80% rename from diesel_compile_tests/tests/compile-fail/find_requires_correct_type.rs rename to diesel_compile_tests/tests/fail/find_requires_correct_type.rs index a8fa6e12faac..550846fdf198 100644 --- a/diesel_compile_tests/tests/compile-fail/find_requires_correct_type.rs +++ b/diesel_compile_tests/tests/fail/find_requires_correct_type.rs @@ -1,4 +1,3 @@ -#[macro_use] extern crate diesel; use diesel::*; @@ -19,10 +18,6 @@ fn main() { let connection = PgConnection::establish("").unwrap(); // FIXME: It'd be nice if this mentioned `AsExpression` int_primary_key::table.find("1"); - //~^ ERROR Expression - //~| ERROR E0277 // FIXME: It'd be nice if this mentioned `AsExpression` string_primary_key::table.find(1); - //~^ ERROR Expression - //~| ERROR E0277 } diff --git a/diesel_compile_tests/tests/fail/find_requires_correct_type.stderr b/diesel_compile_tests/tests/fail/find_requires_correct_type.stderr new file mode 100644 index 000000000000..3fcdab585f20 --- /dev/null +++ b/diesel_compile_tests/tests/fail/find_requires_correct_type.stderr @@ -0,0 +1,51 @@ +error[E0277]: the trait bound `str: diesel::Expression` is not satisfied + --> $DIR/find_requires_correct_type.rs:20:33 + | +20 | int_primary_key::table.find("1"); + | ^^^ the trait `diesel::Expression` is not implemented for `str` + | + = note: required because of the requirements on the impl of `diesel::Expression` for `&str` + = note: required because of the requirements on the impl of `diesel::expression::AsExpression` for `&str` + = note: required because of the requirements on the impl of `diesel::EqAll<&str>` for `int_primary_key::columns::id` + = note: required because of the requirements on the impl of `diesel::query_dsl::filter_dsl::FindDsl<&str>` for `int_primary_key::table` + +error[E0277]: the trait bound `str: diesel::expression::ValidGrouping<()>` is not satisfied + --> $DIR/find_requires_correct_type.rs:20:33 + | +20 | int_primary_key::table.find("1"); + | ^^^ the trait `diesel::expression::ValidGrouping<()>` is not implemented for `str` + | + = note: required because of the requirements on the impl of `diesel::expression::ValidGrouping<()>` for `&str` + = note: required because of the requirements on the impl of `diesel::expression::ValidGrouping<()>` for `diesel::expression::operators::Eq` + = note: required because of the requirements on the impl of `diesel::query_dsl::filter_dsl::FilterDsl>>>` for `diesel::query_builder::SelectStatement` + +error[E0277]: the trait bound `{integer}: diesel::Expression` is not satisfied + --> $DIR/find_requires_correct_type.rs:22:36 + | +22 | string_primary_key::table.find(1); + | ^ the trait `diesel::Expression` is not implemented for `{integer}` + | + = help: the following implementations were found: + <&'a T as diesel::Expression> + <(A, B) as diesel::Expression> + <(A, B, C) as diesel::Expression> + <(A, B, C, D) as diesel::Expression> + and 100 others + = note: required because of the requirements on the impl of `diesel::Expression` for `diesel::expression::operators::Eq` + = note: required because of the requirements on the impl of `diesel::Expression` for `diesel::expression::nullable::Nullable>>` + = note: required because of the requirements on the impl of `diesel::query_dsl::filter_dsl::FilterDsl>>>` for `diesel::query_builder::SelectStatement` + +error[E0277]: the trait bound `{integer}: diesel::expression::ValidGrouping<()>` is not satisfied + --> $DIR/find_requires_correct_type.rs:22:36 + | +22 | string_primary_key::table.find(1); + | ^ the trait `diesel::expression::ValidGrouping<()>` is not implemented for `{integer}` + | + = help: the following implementations were found: + <&'a T as diesel::expression::ValidGrouping> + <(A, B) as diesel::expression::ValidGrouping<__GroupByClause>> + <(A, B, C) as diesel::expression::ValidGrouping<__GroupByClause>> + <(A, B, C, D) as diesel::expression::ValidGrouping<__GroupByClause>> + and 117 others + = note: required because of the requirements on the impl of `diesel::expression::ValidGrouping<()>` for `diesel::expression::operators::Eq` + = note: required because of the requirements on the impl of `diesel::query_dsl::filter_dsl::FilterDsl>>>` for `diesel::query_builder::SelectStatement` diff --git a/diesel_compile_tests/tests/ui/identifiable_missing_pk_field.rs b/diesel_compile_tests/tests/fail/identifiable_missing_pk_field.rs similarity index 95% rename from diesel_compile_tests/tests/ui/identifiable_missing_pk_field.rs rename to diesel_compile_tests/tests/fail/identifiable_missing_pk_field.rs index c8667231936f..01c4f0e2c45a 100644 --- a/diesel_compile_tests/tests/ui/identifiable_missing_pk_field.rs +++ b/diesel_compile_tests/tests/fail/identifiable_missing_pk_field.rs @@ -9,8 +9,7 @@ table! { #[derive(Identifiable)] #[table_name = "foo"] -struct Foo1 { -} +struct Foo1 {} #[derive(Identifiable)] #[table_name = "foo"] @@ -22,8 +21,7 @@ struct Foo2 { #[derive(Identifiable)] #[primary_key(bar)] #[table_name = "foo"] -struct Foo3 { -} +struct Foo3 {} #[derive(Identifiable)] #[primary_key(baz)] diff --git a/diesel_compile_tests/tests/ui/identifiable_missing_pk_field.stderr b/diesel_compile_tests/tests/fail/identifiable_missing_pk_field.stderr similarity index 62% rename from diesel_compile_tests/tests/ui/identifiable_missing_pk_field.stderr rename to diesel_compile_tests/tests/fail/identifiable_missing_pk_field.stderr index 12ddc1847238..1be731ef72ba 100644 --- a/diesel_compile_tests/tests/ui/identifiable_missing_pk_field.stderr +++ b/diesel_compile_tests/tests/fail/identifiable_missing_pk_field.stderr @@ -7,36 +7,33 @@ error: No field with column name id = note: this error originates in a derive macro (in Nightly builds, run with -Z macro-backtrace for more info) error: No field with column name id - --> $DIR/identifiable_missing_pk_field.rs:15:10 + --> $DIR/identifiable_missing_pk_field.rs:14:10 | -15 | #[derive(Identifiable)] +14 | #[derive(Identifiable)] | ^^^^^^^^^^^^ | = note: this error originates in a derive macro (in Nightly builds, run with -Z macro-backtrace for more info) error: No field with column name bar - --> $DIR/identifiable_missing_pk_field.rs:23:15 + --> $DIR/identifiable_missing_pk_field.rs:22:15 | -23 | #[primary_key(bar)] +22 | #[primary_key(bar)] | ^^^ error: No field with column name baz - --> $DIR/identifiable_missing_pk_field.rs:29:15 + --> $DIR/identifiable_missing_pk_field.rs:27:15 | -29 | #[primary_key(baz)] +27 | #[primary_key(baz)] | ^^^ error: No field with column name bar - --> $DIR/identifiable_missing_pk_field.rs:37:20 + --> $DIR/identifiable_missing_pk_field.rs:35:20 | -37 | #[primary_key(foo, bar)] +35 | #[primary_key(foo, bar)] | ^^^ error: No field with column name bar - --> $DIR/identifiable_missing_pk_field.rs:44:20 + --> $DIR/identifiable_missing_pk_field.rs:42:20 | -44 | #[primary_key(foo, bar)] +42 | #[primary_key(foo, bar)] | ^^^ - -error: aborting due to 6 previous errors - diff --git a/diesel_compile_tests/tests/compile-fail/ilike_only_compiles_for_pg.rs b/diesel_compile_tests/tests/fail/ilike_only_compiles_for_pg.rs similarity index 86% rename from diesel_compile_tests/tests/compile-fail/ilike_only_compiles_for_pg.rs rename to diesel_compile_tests/tests/fail/ilike_only_compiles_for_pg.rs index f0b484a4c028..53b5efb51f79 100644 --- a/diesel_compile_tests/tests/compile-fail/ilike_only_compiles_for_pg.rs +++ b/diesel_compile_tests/tests/fail/ilike_only_compiles_for_pg.rs @@ -1,4 +1,4 @@ -#[macro_use] extern crate diesel; +extern crate diesel; use diesel::*; @@ -19,9 +19,7 @@ struct User { fn main() { let connection = SqliteConnection::establish("").unwrap(); users::table.filter(users::name.ilike("%hey%")).execute(&connection); - //~^ ERROR E0271 let connection = MysqlConnection::establish("").unwrap(); users::table.filter(users::name.ilike("%hey%")).execute(&connection); - //~^ ERROR E0271 } diff --git a/diesel_compile_tests/tests/fail/ilike_only_compiles_for_pg.stderr b/diesel_compile_tests/tests/fail/ilike_only_compiles_for_pg.stderr new file mode 100644 index 000000000000..c8fa35a4e377 --- /dev/null +++ b/diesel_compile_tests/tests/fail/ilike_only_compiles_for_pg.stderr @@ -0,0 +1,11 @@ +error[E0271]: type mismatch resolving `::Backend == diesel::pg::Pg` + --> $DIR/ilike_only_compiles_for_pg.rs:21:53 + | +21 | users::table.filter(users::name.ilike("%hey%")).execute(&connection); + | ^^^^^^^ expected struct `diesel::sqlite::Sqlite`, found struct `diesel::pg::Pg` + +error[E0271]: type mismatch resolving `::Backend == diesel::pg::Pg` + --> $DIR/ilike_only_compiles_for_pg.rs:24:53 + | +24 | users::table.filter(users::name.ilike("%hey%")).execute(&connection); + | ^^^^^^^ expected struct `diesel::mysql::Mysql`, found struct `diesel::pg::Pg` diff --git a/diesel_compile_tests/tests/compile-fail/insert_cannot_reference_columns_from_other_table.rs b/diesel_compile_tests/tests/fail/insert_cannot_reference_columns_from_other_table.rs similarity index 63% rename from diesel_compile_tests/tests/compile-fail/insert_cannot_reference_columns_from_other_table.rs rename to diesel_compile_tests/tests/fail/insert_cannot_reference_columns_from_other_table.rs index 23a0dc0fd286..615e0d2ec17b 100644 --- a/diesel_compile_tests/tests/compile-fail/insert_cannot_reference_columns_from_other_table.rs +++ b/diesel_compile_tests/tests/fail/insert_cannot_reference_columns_from_other_table.rs @@ -1,4 +1,3 @@ -#[macro_use] extern crate diesel; use diesel::*; @@ -21,11 +20,8 @@ fn main() { insert_into(users::table) .values(&posts::id.eq(1)); - //~^ ERROR type mismatch resolving `::Table == users::table` insert_into(users::table) .values(&(posts::id.eq(1), users::id.eq(2))); - //~^ ERROR type mismatch resolving `::Table == users::table` - //~| ERROR E0271 //FIXME: Bad error on the second one } diff --git a/diesel_compile_tests/tests/fail/insert_cannot_reference_columns_from_other_table.stderr b/diesel_compile_tests/tests/fail/insert_cannot_reference_columns_from_other_table.stderr new file mode 100644 index 000000000000..6c8c0eaa1372 --- /dev/null +++ b/diesel_compile_tests/tests/fail/insert_cannot_reference_columns_from_other_table.stderr @@ -0,0 +1,25 @@ +error[E0271]: type mismatch resolving `::Table == users::table` + --> $DIR/insert_cannot_reference_columns_from_other_table.rs:22:10 + | +22 | .values(&posts::id.eq(1)); + | ^^^^^^ expected struct `posts::table`, found struct `users::table` + +error[E0271]: type mismatch resolving `<&diesel::expression::grouped::Grouped>> as diesel::Insertable>::Values == diesel::query_builder::ValuesClause<_, users::table>` + --> $DIR/insert_cannot_reference_columns_from_other_table.rs:25:10 + | +25 | .values(&(posts::id.eq(1), users::id.eq(2))); + | ^^^^^^ expected struct `posts::table`, found struct `users::table` + | + = note: expected struct `diesel::query_builder::ValuesClause>, posts::table>` + found struct `diesel::query_builder::ValuesClause<_, users::table>` + = note: required because of the requirements on the impl of `diesel::Insertable` for `(&diesel::expression::grouped::Grouped>>, &diesel::expression::grouped::Grouped>>)` + +error[E0271]: type mismatch resolving `::Table == users::table` + --> $DIR/insert_cannot_reference_columns_from_other_table.rs:25:10 + | +25 | .values(&(posts::id.eq(1), users::id.eq(2))); + | ^^^^^^ expected struct `posts::table`, found struct `users::table` + | + = note: required because of the requirements on the impl of `diesel::Insertable` for `&diesel::expression::operators::Eq>` + = note: required because of the requirements on the impl of `diesel::Insertable` for `&diesel::expression::grouped::Grouped>>` + = note: required because of the requirements on the impl of `diesel::Insertable` for `(&diesel::expression::grouped::Grouped>>, &diesel::expression::grouped::Grouped>>)` diff --git a/diesel_compile_tests/tests/compile-fail/insert_from_select_cant_be_used_with_tuples_or_arrays.rs b/diesel_compile_tests/tests/fail/insert_from_select_cant_be_used_with_tuples_or_arrays.rs similarity index 84% rename from diesel_compile_tests/tests/compile-fail/insert_from_select_cant_be_used_with_tuples_or_arrays.rs rename to diesel_compile_tests/tests/fail/insert_from_select_cant_be_used_with_tuples_or_arrays.rs index 1e157c1cc98a..dbea4be4ef0a 100644 --- a/diesel_compile_tests/tests/compile-fail/insert_from_select_cant_be_used_with_tuples_or_arrays.rs +++ b/diesel_compile_tests/tests/fail/insert_from_select_cant_be_used_with_tuples_or_arrays.rs @@ -1,4 +1,3 @@ -#[macro_use] extern crate diesel; use diesel::*; @@ -21,8 +20,8 @@ table! { } fn main() { - use users::dsl::*; - use posts::dsl::*; + use self::users::dsl::*; + use self::posts::dsl::*; let conn = PgConnection::establish("").unwrap(); // Sanity check, valid query @@ -33,9 +32,7 @@ fn main() { insert_into(posts) .values(vec![users, users]); - //~^ ERROR E0277 insert_into(posts) .values((users, users)); - //~^ ERROR E0271 } diff --git a/diesel_compile_tests/tests/fail/insert_from_select_cant_be_used_with_tuples_or_arrays.stderr b/diesel_compile_tests/tests/fail/insert_from_select_cant_be_used_with_tuples_or_arrays.stderr new file mode 100644 index 000000000000..3d3aa32a10d9 --- /dev/null +++ b/diesel_compile_tests/tests/fail/insert_from_select_cant_be_used_with_tuples_or_arrays.stderr @@ -0,0 +1,18 @@ +error[E0277]: the trait bound `users::table: diesel::query_builder::UndecoratedInsertRecord` is not satisfied + --> $DIR/insert_from_select_cant_be_used_with_tuples_or_arrays.rs:34:17 + | +34 | .values(vec![users, users]); + | ^^^^^^^^^^^^^^^^^^ the trait `diesel::query_builder::UndecoratedInsertRecord` is not implemented for `users::table` + | + = note: required because of the requirements on the impl of `diesel::Insertable` for `std::vec::Vec` + = note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info) + +error[E0271]: type mismatch resolving `>::Values == diesel::query_builder::ValuesClause<_, posts::table>` + --> $DIR/insert_from_select_cant_be_used_with_tuples_or_arrays.rs:37:10 + | +37 | .values((users, users)); + | ^^^^^^ expected struct `diesel::query_builder::insert_statement::insert_from_select::InsertFromSelect`, found struct `diesel::query_builder::ValuesClause` + | + = note: expected struct `diesel::query_builder::insert_statement::insert_from_select::InsertFromSelect, (posts::columns::user_id, posts::columns::title, posts::columns::body)>` + found struct `diesel::query_builder::ValuesClause<_, posts::table>` + = note: required because of the requirements on the impl of `diesel::Insertable` for `(users::table, users::table)` diff --git a/diesel_compile_tests/tests/compile-fail/insert_from_select_requires_valid_column_list.rs b/diesel_compile_tests/tests/fail/insert_from_select_requires_valid_column_list.rs similarity index 86% rename from diesel_compile_tests/tests/compile-fail/insert_from_select_requires_valid_column_list.rs rename to diesel_compile_tests/tests/fail/insert_from_select_requires_valid_column_list.rs index 25f9f4a7ccdf..0ed053c659e8 100644 --- a/diesel_compile_tests/tests/compile-fail/insert_from_select_requires_valid_column_list.rs +++ b/diesel_compile_tests/tests/fail/insert_from_select_requires_valid_column_list.rs @@ -1,4 +1,3 @@ -#[macro_use] extern crate diesel; use diesel::*; @@ -28,8 +27,8 @@ table! { } fn main() { - use users::dsl::*; - use posts::dsl::*; + use self::users::dsl::*; + use self::posts::dsl::*; let conn = PgConnection::establish("").unwrap(); // Sanity check, valid query with no column list @@ -56,43 +55,35 @@ fn main() { users.select((name, hair_color)) .insert_into(posts) .execute(&conn) - //~^ ERROR type mismatch .unwrap(); // Single column, wrong table users.select(id) .insert_into(posts) .into_columns(comments::post_id); - //~^ ERROR type mismatch // Single column, wrong type users.select(id) .insert_into(posts) .into_columns(title); - //~^ ERROR type mismatch // Multiple columns, one from wrong table users.select((id, name)) .insert_into(posts) .into_columns((comments::post_id, title)); - //~^ ERROR E0277 // Multiple columns, both from wrong table users.select((id, hair_color)) .insert_into(posts) .into_columns((comments::post_id, comments::body)); - //~^ ERROR type mismatch - //~| ERROR type mismatch // Multiple columns, one wrong type users.select((id, name)) .insert_into(posts) .into_columns((user_id, body)); - //~^ ERROR type mismatch // Multiple columns, both wrong types users.select((id, name)) .insert_into(posts) .into_columns((title, body)); - //~^ ERROR type mismatch } diff --git a/diesel_compile_tests/tests/fail/insert_from_select_requires_valid_column_list.stderr b/diesel_compile_tests/tests/fail/insert_from_select_requires_valid_column_list.stderr new file mode 100644 index 000000000000..071d52be46b6 --- /dev/null +++ b/diesel_compile_tests/tests/fail/insert_from_select_requires_valid_column_list.stderr @@ -0,0 +1,66 @@ +error[E0271]: type mismatch resolving `> as diesel::query_builder::Query>::SqlType == (diesel::sql_types::Integer, diesel::sql_types::Text, diesel::sql_types::Nullable)` + --> $DIR/insert_from_select_requires_valid_column_list.rs:57:10 + | +57 | .execute(&conn) + | ^^^^^^^ expected a tuple with 2 elements, found one with 3 elements + | + = note: expected tuple `(diesel::sql_types::Text, diesel::sql_types::Nullable)` + found tuple `(diesel::sql_types::Integer, diesel::sql_types::Text, diesel::sql_types::Nullable)` + = note: required because of the requirements on the impl of `diesel::query_builder::QueryFragment<_>` for `diesel::query_builder::insert_statement::insert_from_select::InsertFromSelect>, (posts::columns::user_id, posts::columns::title, posts::columns::body)>` + = note: required because of the requirements on the impl of `diesel::query_builder::QueryFragment<_>` for `diesel::query_builder::InsertStatement>, (posts::columns::user_id, posts::columns::title, posts::columns::body)>>` + = note: required because of the requirements on the impl of `diesel::query_dsl::load_dsl::ExecuteDsl<_, _>` for `diesel::query_builder::InsertStatement>, (posts::columns::user_id, posts::columns::title, posts::columns::body)>>` + +error[E0271]: type mismatch resolving `::Table == posts::table` + --> $DIR/insert_from_select_requires_valid_column_list.rs:63:10 + | +63 | .into_columns(comments::post_id); + | ^^^^^^^^^^^^ expected struct `comments::table`, found struct `posts::table` + +error[E0271]: type mismatch resolving `::SqlType == diesel::sql_types::Integer` + --> $DIR/insert_from_select_requires_valid_column_list.rs:68:10 + | +68 | .into_columns(title); + | ^^^^^^^^^^^^ expected struct `diesel::sql_types::Text`, found struct `diesel::sql_types::Integer` + +error[E0277]: the trait bound `(comments::columns::post_id, posts::columns::title): diesel::query_builder::insert_statement::column_list::ColumnList` is not satisfied + --> $DIR/insert_from_select_requires_valid_column_list.rs:73:23 + | +73 | .into_columns((comments::post_id, title)); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `diesel::query_builder::insert_statement::column_list::ColumnList` is not implemented for `(comments::columns::post_id, posts::columns::title)` + | + = help: the following implementations were found: + <(A, B) as diesel::query_builder::insert_statement::column_list::ColumnList> + +error[E0271]: type mismatch resolving `::Table == posts::table` + --> $DIR/insert_from_select_requires_valid_column_list.rs:78:10 + | +78 | .into_columns((comments::post_id, comments::body)); + | ^^^^^^^^^^^^ expected struct `comments::table`, found struct `posts::table` + | + = note: required because of the requirements on the impl of `diesel::query_builder::insert_statement::column_list::ColumnList` for `(comments::columns::post_id, comments::columns::body)` + +error[E0271]: type mismatch resolving `::Table == posts::table` + --> $DIR/insert_from_select_requires_valid_column_list.rs:78:10 + | +78 | .into_columns((comments::post_id, comments::body)); + | ^^^^^^^^^^^^ expected struct `comments::table`, found struct `posts::table` + | + = note: required because of the requirements on the impl of `diesel::query_builder::insert_statement::column_list::ColumnList` for `(comments::columns::post_id, comments::columns::body)` + +error[E0271]: type mismatch resolving `<(posts::columns::user_id, posts::columns::body) as diesel::Expression>::SqlType == (diesel::sql_types::Integer, diesel::sql_types::Text)` + --> $DIR/insert_from_select_requires_valid_column_list.rs:83:10 + | +83 | .into_columns((user_id, body)); + | ^^^^^^^^^^^^ expected struct `diesel::sql_types::Nullable`, found struct `diesel::sql_types::Text` + | + = note: expected tuple `(diesel::sql_types::Integer, diesel::sql_types::Nullable)` + found tuple `(diesel::sql_types::Integer, diesel::sql_types::Text)` + +error[E0271]: type mismatch resolving `<(posts::columns::title, posts::columns::body) as diesel::Expression>::SqlType == (diesel::sql_types::Integer, diesel::sql_types::Text)` + --> $DIR/insert_from_select_requires_valid_column_list.rs:88:10 + | +88 | .into_columns((title, body)); + | ^^^^^^^^^^^^ expected struct `diesel::sql_types::Text`, found struct `diesel::sql_types::Integer` + | + = note: expected tuple `(diesel::sql_types::Text, diesel::sql_types::Nullable)` + found tuple `(diesel::sql_types::Integer, diesel::sql_types::Text)` diff --git a/diesel_compile_tests/tests/ui/insert_from_select_with_on_conflict_without_where_clause_not_supported_on_sqlite.rs b/diesel_compile_tests/tests/fail/insert_from_select_with_on_conflict_without_where_clause_not_supported_on_sqlite.rs similarity index 100% rename from diesel_compile_tests/tests/ui/insert_from_select_with_on_conflict_without_where_clause_not_supported_on_sqlite.rs rename to diesel_compile_tests/tests/fail/insert_from_select_with_on_conflict_without_where_clause_not_supported_on_sqlite.rs diff --git a/diesel_compile_tests/tests/ui/insert_from_select_with_on_conflict_without_where_clause_not_supported_on_sqlite.stderr b/diesel_compile_tests/tests/fail/insert_from_select_with_on_conflict_without_where_clause_not_supported_on_sqlite.stderr similarity index 76% rename from diesel_compile_tests/tests/ui/insert_from_select_with_on_conflict_without_where_clause_not_supported_on_sqlite.stderr rename to diesel_compile_tests/tests/fail/insert_from_select_with_on_conflict_without_where_clause_not_supported_on_sqlite.stderr index 14799e1b29d4..44ef50539f8b 100644 --- a/diesel_compile_tests/tests/ui/insert_from_select_with_on_conflict_without_where_clause_not_supported_on_sqlite.stderr +++ b/diesel_compile_tests/tests/fail/insert_from_select_with_on_conflict_without_where_clause_not_supported_on_sqlite.stderr @@ -3,7 +3,3 @@ error[E0271]: type mismatch resolving ` $DIR/insert_requires_value_of_same_type_as_column.rs:19:26 + | +19 | .values(&name.eq(1)); + | ^ the trait `diesel::Expression` is not implemented for `{integer}` + | + = help: the following implementations were found: + <&'a T as diesel::Expression> + <(A, B) as diesel::Expression> + <(A, B, C) as diesel::Expression> + <(A, B, C, D) as diesel::Expression> + and 100 others + = note: required because of the requirements on the impl of `diesel::expression::AsExpression` for `{integer}` diff --git a/diesel_compile_tests/tests/compile-fail/insert_statement_does_not_support_returning_methods_on_sqlite.rs b/diesel_compile_tests/tests/fail/insert_statement_does_not_support_returning_methods_on_sqlite.rs similarity index 80% rename from diesel_compile_tests/tests/compile-fail/insert_statement_does_not_support_returning_methods_on_sqlite.rs rename to diesel_compile_tests/tests/fail/insert_statement_does_not_support_returning_methods_on_sqlite.rs index c667bf7f1be7..24f6000de67b 100644 --- a/diesel_compile_tests/tests/compile-fail/insert_statement_does_not_support_returning_methods_on_sqlite.rs +++ b/diesel_compile_tests/tests/fail/insert_statement_does_not_support_returning_methods_on_sqlite.rs @@ -1,10 +1,7 @@ -#[macro_use] extern crate diesel; -use diesel::backend::Backend; -use diesel::sql_types::{Integer, VarChar}; -use diesel::sqlite::SqliteConnection; use diesel::deserialize::Queryable; +use diesel::sqlite::SqliteConnection; use diesel::*; table! { @@ -20,7 +17,6 @@ pub struct User { name: String, } - #[derive(Insertable)] #[table_name = "users"] pub struct NewUser(#[column_name = "name"] String); @@ -31,11 +27,9 @@ fn main() { insert_into(users::table) .values(&NewUser("Hello".into())) .get_result::(&connection); - //~^ ERROR: SupportsReturningClause insert_into(users::table) .values(&NewUser("Hello".into())) .returning(users::name) .get_result::(&connection); - //~^ ERROR: SupportsReturningClause } diff --git a/diesel_compile_tests/tests/fail/insert_statement_does_not_support_returning_methods_on_sqlite.stderr b/diesel_compile_tests/tests/fail/insert_statement_does_not_support_returning_methods_on_sqlite.stderr new file mode 100644 index 000000000000..acbab877ac3a --- /dev/null +++ b/diesel_compile_tests/tests/fail/insert_statement_does_not_support_returning_methods_on_sqlite.stderr @@ -0,0 +1,19 @@ +error[E0277]: the trait bound `diesel::sqlite::Sqlite: diesel::backend::SupportsReturningClause` is not satisfied + --> $DIR/insert_statement_does_not_support_returning_methods_on_sqlite.rs:29:10 + | +29 | .get_result::(&connection); + | ^^^^^^^^^^ the trait `diesel::backend::SupportsReturningClause` is not implemented for `diesel::sqlite::Sqlite` + | + = note: required because of the requirements on the impl of `diesel::query_builder::QueryFragment` for `diesel::query_builder::returning_clause::ReturningClause<(users::columns::id, users::columns::name)>` + = note: required because of the requirements on the impl of `diesel::query_builder::QueryFragment` for `diesel::query_builder::InsertStatement>,), users::table>, diesel::query_builder::insert_statement::Insert, diesel::query_builder::returning_clause::ReturningClause<(users::columns::id, users::columns::name)>>` + = note: required because of the requirements on the impl of `diesel::query_dsl::LoadQuery` for `diesel::query_builder::InsertStatement>,), users::table>>` + +error[E0277]: the trait bound `diesel::sqlite::Sqlite: diesel::backend::SupportsReturningClause` is not satisfied + --> $DIR/insert_statement_does_not_support_returning_methods_on_sqlite.rs:34:10 + | +34 | .get_result::(&connection); + | ^^^^^^^^^^ the trait `diesel::backend::SupportsReturningClause` is not implemented for `diesel::sqlite::Sqlite` + | + = note: required because of the requirements on the impl of `diesel::query_builder::QueryFragment` for `diesel::query_builder::returning_clause::ReturningClause` + = note: required because of the requirements on the impl of `diesel::query_builder::QueryFragment` for `diesel::query_builder::InsertStatement>,), users::table>, diesel::query_builder::insert_statement::Insert, diesel::query_builder::returning_clause::ReturningClause>` + = note: required because of the requirements on the impl of `diesel::query_dsl::LoadQuery` for `diesel::query_builder::InsertStatement>,), users::table>, diesel::query_builder::insert_statement::Insert, diesel::query_builder::returning_clause::ReturningClause>` diff --git a/diesel_compile_tests/tests/ui/insertable_empty_struct.rs b/diesel_compile_tests/tests/fail/insertable_empty_struct.rs similarity index 100% rename from diesel_compile_tests/tests/ui/insertable_empty_struct.rs rename to diesel_compile_tests/tests/fail/insertable_empty_struct.rs diff --git a/diesel_compile_tests/tests/ui/insertable_empty_struct.stderr b/diesel_compile_tests/tests/fail/insertable_empty_struct.stderr similarity index 89% rename from diesel_compile_tests/tests/ui/insertable_empty_struct.stderr rename to diesel_compile_tests/tests/fail/insertable_empty_struct.stderr index c20eb7e9cc2d..e20a19d15f8b 100644 --- a/diesel_compile_tests/tests/ui/insertable_empty_struct.stderr +++ b/diesel_compile_tests/tests/fail/insertable_empty_struct.stderr @@ -6,6 +6,3 @@ error: Cannot derive Insertable for unit structs | = help: Use `insert_into(users::table).default_values()` if you want `DEFAULT VALUES` = note: this error originates in a derive macro (in Nightly builds, run with -Z macro-backtrace for more info) - -error: aborting due to previous error - diff --git a/diesel_compile_tests/tests/ui/insertable_missing_table_or_column.rs b/diesel_compile_tests/tests/fail/insertable_missing_table_or_column.rs similarity index 100% rename from diesel_compile_tests/tests/ui/insertable_missing_table_or_column.rs rename to diesel_compile_tests/tests/fail/insertable_missing_table_or_column.rs diff --git a/diesel_compile_tests/tests/ui/insertable_missing_table_or_column.stderr b/diesel_compile_tests/tests/fail/insertable_missing_table_or_column.stderr similarity index 90% rename from diesel_compile_tests/tests/ui/insertable_missing_table_or_column.stderr rename to diesel_compile_tests/tests/fail/insertable_missing_table_or_column.stderr index af62686f2fa2..bffd1607875b 100644 --- a/diesel_compile_tests/tests/ui/insertable_missing_table_or_column.stderr +++ b/diesel_compile_tests/tests/fail/insertable_missing_table_or_column.stderr @@ -41,8 +41,3 @@ error[E0425]: cannot find value `name` in module `users` | ^^^^^^ not found in `users` | = note: this error originates in a derive macro (in Nightly builds, run with -Z macro-backtrace for more info) - -error: aborting due to 6 previous errors - -Some errors have detailed explanations: E0412, E0425, E0433. -For more information about an error, try `rustc --explain E0412`. diff --git a/diesel_compile_tests/tests/compile-fail/join_with_explicit_on_requires_valid_boolean_expression.rs b/diesel_compile_tests/tests/fail/join_with_explicit_on_requires_valid_boolean_expression.rs similarity index 80% rename from diesel_compile_tests/tests/compile-fail/join_with_explicit_on_requires_valid_boolean_expression.rs rename to diesel_compile_tests/tests/fail/join_with_explicit_on_requires_valid_boolean_expression.rs index 949b33ada6f1..f49f20dcbd68 100644 --- a/diesel_compile_tests/tests/compile-fail/join_with_explicit_on_requires_valid_boolean_expression.rs +++ b/diesel_compile_tests/tests/fail/join_with_explicit_on_requires_valid_boolean_expression.rs @@ -1,4 +1,4 @@ -#[macro_use] extern crate diesel; +extern crate diesel; use diesel::prelude::*; @@ -29,8 +29,6 @@ fn main() { let _ = users::table.inner_join(posts::table.on(users::id.eq(posts::id))); // Invalid, references column that isn't being queried let _ = users::table.inner_join(posts::table.on(users::id.eq(comments::id))); - //~^ ERROR E0271 // Invalid, type is not boolean let _ = users::table.inner_join(posts::table.on(users::id)); - //~^ ERROR the trait bound `diesel::sql_types::Integer: diesel::sql_types::BoolOrNullableBool` is not satisfied [E0277] } diff --git a/diesel_compile_tests/tests/fail/join_with_explicit_on_requires_valid_boolean_expression.stderr b/diesel_compile_tests/tests/fail/join_with_explicit_on_requires_valid_boolean_expression.stderr new file mode 100644 index 000000000000..ae9a12aeb4b4 --- /dev/null +++ b/diesel_compile_tests/tests/fail/join_with_explicit_on_requires_valid_boolean_expression.stderr @@ -0,0 +1,24 @@ +error[E0271]: type mismatch resolving ` as diesel::query_source::AppearsInFromClause>::Count == diesel::query_source::Once` + --> $DIR/join_with_explicit_on_requires_valid_boolean_expression.rs:31:26 + | +31 | let _ = users::table.inner_join(posts::table.on(users::id.eq(comments::id))); + | ^^^^^^^^^^ expected struct `diesel::query_source::Never`, found struct `diesel::query_source::Once` + | + = note: required because of the requirements on the impl of `diesel::AppearsOnTable>` for `comments::columns::id` + = note: required because of the requirements on the impl of `diesel::AppearsOnTable>` for `diesel::expression::operators::Eq` + = note: required because of the requirements on the impl of `diesel::AppearsOnTable>` for `diesel::expression::grouped::Grouped>` + = note: required because of the requirements on the impl of `diesel::QuerySource` for `diesel::query_source::joins::JoinOn, diesel::expression::grouped::Grouped>>` + = note: required because of the requirements on the impl of `diesel::query_builder::Query` for `diesel::query_builder::SelectStatement, diesel::expression::grouped::Grouped>>>` + = note: required because of the requirements on the impl of `diesel::query_builder::AsQuery` for `diesel::query_builder::SelectStatement, diesel::expression::grouped::Grouped>>>` + = note: required because of the requirements on the impl of `diesel::query_dsl::InternalJoinDsl>>` for `diesel::query_builder::SelectStatement` + +error[E0277]: the trait bound `diesel::sql_types::Integer: diesel::sql_types::BoolOrNullableBool` is not satisfied + --> $DIR/join_with_explicit_on_requires_valid_boolean_expression.rs:33:26 + | +33 | let _ = users::table.inner_join(posts::table.on(users::id)); + | ^^^^^^^^^^ the trait `diesel::sql_types::BoolOrNullableBool` is not implemented for `diesel::sql_types::Integer` + | + = note: required because of the requirements on the impl of `diesel::QuerySource` for `diesel::query_source::joins::JoinOn, users::columns::id>` + = note: required because of the requirements on the impl of `diesel::query_builder::Query` for `diesel::query_builder::SelectStatement, users::columns::id>>` + = note: required because of the requirements on the impl of `diesel::query_builder::AsQuery` for `diesel::query_builder::SelectStatement, users::columns::id>>` + = note: required because of the requirements on the impl of `diesel::query_dsl::InternalJoinDsl` for `diesel::query_builder::SelectStatement` diff --git a/diesel_compile_tests/tests/fail/must_use_query_methods.rs b/diesel_compile_tests/tests/fail/must_use_query_methods.rs new file mode 100644 index 000000000000..b1b1365c21ce --- /dev/null +++ b/diesel_compile_tests/tests/fail/must_use_query_methods.rs @@ -0,0 +1,35 @@ +#![deny(unused_must_use)] + +extern crate diesel; + +use diesel::*; + +table! { + stuff (b) { + b -> Bool, + } +} + +fn main() { + use stuff::b; + use stuff::table as st; + + st.select(b); + st.select(b).distinct(); + st.count(); + st.order(b); + st.limit(1); + st.offset(1); + + st.filter(b.eq(true)); + st.filter(b.eq(true)).limit(1); + + insert_into(st); + insert_into(st).values(&vec![b.eq(true), b.eq(false)]); + + update(st).set(b.eq(true)); + + delete(st); + + let _thingies = st.filter(b.eq(true)); // No ERROR +} diff --git a/diesel_compile_tests/tests/fail/must_use_query_methods.stderr b/diesel_compile_tests/tests/fail/must_use_query_methods.stderr new file mode 100644 index 000000000000..be9a4d41067c --- /dev/null +++ b/diesel_compile_tests/tests/fail/must_use_query_methods.stderr @@ -0,0 +1,100 @@ +error: unused `diesel::query_builder::SelectStatement` that must be used + --> $DIR/must_use_query_methods.rs:17:5 + | +17 | st.select(b); + | ^^^^^^^^^^^^^ + | +note: the lint level is defined here + --> $DIR/must_use_query_methods.rs:1:9 + | +1 | #![deny(unused_must_use)] + | ^^^^^^^^^^^^^^^ + = note: Queries are only executed when calling `load`, `get_result` or similar. + +error: unused `diesel::query_builder::SelectStatement` that must be used + --> $DIR/must_use_query_methods.rs:18:5 + | +18 | st.select(b).distinct(); + | ^^^^^^^^^^^^^^^^^^^^^^^^ + | + = note: Queries are only executed when calling `load`, `get_result` or similar. + +error: unused `diesel::query_builder::SelectStatement` that must be used + --> $DIR/must_use_query_methods.rs:19:5 + | +19 | st.count(); + | ^^^^^^^^^^^ + | + = note: Queries are only executed when calling `load`, `get_result` or similar. + +error: unused `diesel::query_builder::SelectStatement` that must be used + --> $DIR/must_use_query_methods.rs:20:5 + | +20 | st.order(b); + | ^^^^^^^^^^^^ + | + = note: Queries are only executed when calling `load`, `get_result` or similar. + +error: unused `diesel::query_builder::SelectStatement` that must be used + --> $DIR/must_use_query_methods.rs:21:5 + | +21 | st.limit(1); + | ^^^^^^^^^^^^ + | + = note: Queries are only executed when calling `load`, `get_result` or similar. + +error: unused `diesel::query_builder::SelectStatement` that must be used + --> $DIR/must_use_query_methods.rs:22:5 + | +22 | st.offset(1); + | ^^^^^^^^^^^^^ + | + = note: Queries are only executed when calling `load`, `get_result` or similar. + +error: unused `diesel::query_builder::SelectStatement` that must be used + --> $DIR/must_use_query_methods.rs:24:5 + | +24 | st.filter(b.eq(true)); + | ^^^^^^^^^^^^^^^^^^^^^^ + | + = note: Queries are only executed when calling `load`, `get_result` or similar. + +error: unused `diesel::query_builder::SelectStatement` that must be used + --> $DIR/must_use_query_methods.rs:25:5 + | +25 | st.filter(b.eq(true)).limit(1); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + | + = note: Queries are only executed when calling `load`, `get_result` or similar. + +error: unused `diesel::query_builder::IncompleteInsertStatement` that must be used + --> $DIR/must_use_query_methods.rs:27:5 + | +27 | insert_into(st); + | ^^^^^^^^^^^^^^^^ + | + = note: Queries are only executed when calling `load`, `get_result` or similar. + +error: unused `diesel::query_builder::InsertStatement` that must be used + --> $DIR/must_use_query_methods.rs:28:5 + | +28 | insert_into(st).values(&vec![b.eq(true), b.eq(false)]); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + | + = note: Queries are only executed when calling `load`, `get_result` or similar. + +error: unused `diesel::query_builder::UpdateStatement` that must be used + --> $DIR/must_use_query_methods.rs:30:5 + | +30 | update(st).set(b.eq(true)); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ + | + = note: Queries are only executed when calling `load`, `get_result` or similar. + +error: unused `diesel::query_builder::DeleteStatement` that must be used + --> $DIR/must_use_query_methods.rs:32:5 + | +32 | delete(st); + | ^^^^^^^^^^^ + | + = note: Queries are only executed when calling `load`, `get_result` or similar. diff --git a/diesel_compile_tests/tests/ui/mysql_does_not_support_offset_without_limit.rs b/diesel_compile_tests/tests/fail/mysql_does_not_support_offset_without_limit.rs similarity index 91% rename from diesel_compile_tests/tests/ui/mysql_does_not_support_offset_without_limit.rs rename to diesel_compile_tests/tests/fail/mysql_does_not_support_offset_without_limit.rs index 385030d22e36..30191042f596 100644 --- a/diesel_compile_tests/tests/ui/mysql_does_not_support_offset_without_limit.rs +++ b/diesel_compile_tests/tests/fail/mysql_does_not_support_offset_without_limit.rs @@ -1,8 +1,6 @@ -#[macro_use] extern crate diesel; use diesel::*; -use diesel::dsl::*; table! { users { diff --git a/diesel_compile_tests/tests/ui/mysql_does_not_support_offset_without_limit.stderr b/diesel_compile_tests/tests/fail/mysql_does_not_support_offset_without_limit.stderr similarity index 93% rename from diesel_compile_tests/tests/ui/mysql_does_not_support_offset_without_limit.stderr rename to diesel_compile_tests/tests/fail/mysql_does_not_support_offset_without_limit.stderr index 08ccca565d2e..596b7acfcc7d 100644 --- a/diesel_compile_tests/tests/ui/mysql_does_not_support_offset_without_limit.stderr +++ b/diesel_compile_tests/tests/fail/mysql_does_not_support_offset_without_limit.stderr @@ -1,7 +1,7 @@ error[E0277]: the trait bound `diesel::query_builder::LimitOffsetClause>>: diesel::query_builder::QueryFragment` is not satisfied - --> $DIR/mysql_does_not_support_offset_without_limit.rs:18:29 + --> $DIR/mysql_does_not_support_offset_without_limit.rs:16:29 | -18 | users::table.offset(42).get_result::<(i32, String)>(&connection); +16 | users::table.offset(42).get_result::<(i32, String)>(&connection); | ^^^^^^^^^^ the trait `diesel::query_builder::QueryFragment` is not implemented for `diesel::query_builder::LimitOffsetClause>>` | = help: the following implementations were found: @@ -14,9 +14,9 @@ error[E0277]: the trait bound `diesel::query_builder::LimitOffsetClause` for `diesel::query_builder::SelectStatement>>>` error[E0277]: the trait bound `diesel::query_builder::LimitOffsetClause>>: diesel::query_builder::IntoBoxedClause<'_, diesel::mysql::Mysql>` is not satisfied - --> $DIR/mysql_does_not_support_offset_without_limit.rs:20:29 + --> $DIR/mysql_does_not_support_offset_without_limit.rs:18:29 | -20 | users::table.offset(42).into_boxed().get_result::<(i32, String)>(&connection); +18 | users::table.offset(42).into_boxed().get_result::<(i32, String)>(&connection); | ^^^^^^^^^^ the trait `diesel::query_builder::IntoBoxedClause<'_, diesel::mysql::Mysql>` is not implemented for `diesel::query_builder::LimitOffsetClause>>` | = help: the following implementations were found: @@ -26,7 +26,3 @@ error[E0277]: the trait bound `diesel::query_builder::LimitOffsetClause, diesel::query_builder::OffsetClause> as diesel::query_builder::IntoBoxedClause<'a, diesel::mysql::Mysql>> and 4 others = note: required because of the requirements on the impl of `diesel::query_dsl::boxed_dsl::BoxedDsl<'_, diesel::mysql::Mysql>` for `diesel::query_builder::SelectStatement>>>` - -error: aborting due to 2 previous errors - -For more information about this error, try `rustc --explain E0277`. diff --git a/diesel_compile_tests/tests/compile-fail/numeric_ops_require_numeric_column.rs b/diesel_compile_tests/tests/fail/numeric_ops_require_numeric_column.rs similarity index 69% rename from diesel_compile_tests/tests/compile-fail/numeric_ops_require_numeric_column.rs rename to diesel_compile_tests/tests/fail/numeric_ops_require_numeric_column.rs index 80de57c04bb2..2ffb4de0ee76 100644 --- a/diesel_compile_tests/tests/compile-fail/numeric_ops_require_numeric_column.rs +++ b/diesel_compile_tests/tests/fail/numeric_ops_require_numeric_column.rs @@ -1,4 +1,3 @@ -#[macro_use] extern crate diesel; use diesel::*; @@ -14,5 +13,4 @@ fn main() { use self::users::dsl::*; let _ = users.select(name + name); - //~^ ERROR cannot add `users::columns::name` to `users::columns::name` } diff --git a/diesel_compile_tests/tests/fail/numeric_ops_require_numeric_column.stderr b/diesel_compile_tests/tests/fail/numeric_ops_require_numeric_column.stderr new file mode 100644 index 000000000000..b521490a5b7d --- /dev/null +++ b/diesel_compile_tests/tests/fail/numeric_ops_require_numeric_column.stderr @@ -0,0 +1,9 @@ +error[E0369]: cannot add `users::columns::name` to `users::columns::name` + --> $DIR/numeric_ops_require_numeric_column.rs:15:31 + | +15 | let _ = users.select(name + name); + | ---- ^ ---- users::columns::name + | | + | users::columns::name + | + = note: an implementation of `std::ops::Add` might be missing for `users::columns::name` diff --git a/diesel_compile_tests/tests/compile-fail/order_requires_column_from_same_table.rs b/diesel_compile_tests/tests/fail/order_requires_column_from_same_table.rs similarity index 85% rename from diesel_compile_tests/tests/compile-fail/order_requires_column_from_same_table.rs rename to diesel_compile_tests/tests/fail/order_requires_column_from_same_table.rs index 476b874267fa..f54d83035557 100644 --- a/diesel_compile_tests/tests/compile-fail/order_requires_column_from_same_table.rs +++ b/diesel_compile_tests/tests/fail/order_requires_column_from_same_table.rs @@ -1,4 +1,3 @@ -#[macro_use] extern crate diesel; use diesel::*; @@ -17,5 +16,4 @@ table! { fn main() { let source = users::table.order(posts::id); - //~^ ERROR E0277 } diff --git a/diesel_compile_tests/tests/fail/order_requires_column_from_same_table.stderr b/diesel_compile_tests/tests/fail/order_requires_column_from_same_table.stderr new file mode 100644 index 000000000000..7a2f97ff4e07 --- /dev/null +++ b/diesel_compile_tests/tests/fail/order_requires_column_from_same_table.stderr @@ -0,0 +1,10 @@ +error[E0277]: the trait bound `users::table: diesel::query_source::AppearsInFromClause` is not satisfied + --> $DIR/order_requires_column_from_same_table.rs:18:31 + | +18 | let source = users::table.order(posts::id); + | ^^^^^ the trait `diesel::query_source::AppearsInFromClause` is not implemented for `users::table` + | + = help: the following implementations were found: + > + = note: required because of the requirements on the impl of `diesel::AppearsOnTable` for `posts::columns::id` + = note: required because of the requirements on the impl of `diesel::query_dsl::methods::OrderDsl` for `diesel::query_builder::SelectStatement` diff --git a/diesel_compile_tests/tests/compile-fail/ordering_functions_require_ord.rs b/diesel_compile_tests/tests/fail/ordering_functions_require_ord.rs similarity index 70% rename from diesel_compile_tests/tests/compile-fail/ordering_functions_require_ord.rs rename to diesel_compile_tests/tests/fail/ordering_functions_require_ord.rs index aa76f723e478..51f30635f6d4 100644 --- a/diesel_compile_tests/tests/compile-fail/ordering_functions_require_ord.rs +++ b/diesel_compile_tests/tests/fail/ordering_functions_require_ord.rs @@ -1,8 +1,7 @@ -#[macro_use] extern crate diesel; -use diesel::*; use diesel::dsl::{max, min}; +use diesel::*; table! { stuff (b) { @@ -12,9 +11,5 @@ table! { fn main() { let source = stuff::table.select(max(stuff::b)); - //~^ ERROR SqlOrd - //~| ERROR E0277 let source = stuff::table.select(min(stuff::b)); - //~^ ERROR SqlOrd - //~| ERROR E0277 } diff --git a/diesel_compile_tests/tests/fail/ordering_functions_require_ord.stderr b/diesel_compile_tests/tests/fail/ordering_functions_require_ord.stderr new file mode 100644 index 000000000000..e1cce2e47658 --- /dev/null +++ b/diesel_compile_tests/tests/fail/ordering_functions_require_ord.stderr @@ -0,0 +1,45 @@ +error[E0277]: the trait bound `diesel::sql_types::Bool: diesel::sql_types::SqlOrd` is not satisfied + --> $DIR/ordering_functions_require_ord.rs:13:38 + | +13 | let source = stuff::table.select(max(stuff::b)); + | ^^^ the trait `diesel::sql_types::SqlOrd` is not implemented for `diesel::sql_types::Bool` + | + ::: $WORKSPACE/diesel/src/expression/functions/aggregate_ordering.rs + | + | fn max(expr: Nullable) -> ST::Ret; + | --------------- required by this bound in `diesel::dsl::max` + | + = note: required because of the requirements on the impl of `diesel::dsl::SqlOrdAggregate` for `diesel::sql_types::Bool` + +error[E0277]: the trait bound `diesel::sql_types::Bool: diesel::sql_types::SqlOrd` is not satisfied + --> $DIR/ordering_functions_require_ord.rs:13:38 + | +13 | let source = stuff::table.select(max(stuff::b)); + | ^^^^^^^^^^^^^ the trait `diesel::sql_types::SqlOrd` is not implemented for `diesel::sql_types::Bool` + | + = note: required because of the requirements on the impl of `diesel::dsl::SqlOrdAggregate` for `diesel::sql_types::Bool` + = note: required because of the requirements on the impl of `diesel::Expression` for `diesel::expression::functions::aggregate_ordering::max::max>` + = note: required because of the requirements on the impl of `diesel::query_dsl::select_dsl::SelectDsl>>` for `stuff::table` + +error[E0277]: the trait bound `diesel::sql_types::Bool: diesel::sql_types::SqlOrd` is not satisfied + --> $DIR/ordering_functions_require_ord.rs:14:38 + | +14 | let source = stuff::table.select(min(stuff::b)); + | ^^^ the trait `diesel::sql_types::SqlOrd` is not implemented for `diesel::sql_types::Bool` + | + ::: $WORKSPACE/diesel/src/expression/functions/aggregate_ordering.rs + | + | fn min(expr: Nullable) -> ST::Ret; + | --------------- required by this bound in `diesel::dsl::min` + | + = note: required because of the requirements on the impl of `diesel::dsl::SqlOrdAggregate` for `diesel::sql_types::Bool` + +error[E0277]: the trait bound `diesel::sql_types::Bool: diesel::sql_types::SqlOrd` is not satisfied + --> $DIR/ordering_functions_require_ord.rs:14:38 + | +14 | let source = stuff::table.select(min(stuff::b)); + | ^^^^^^^^^^^^^ the trait `diesel::sql_types::SqlOrd` is not implemented for `diesel::sql_types::Bool` + | + = note: required because of the requirements on the impl of `diesel::dsl::SqlOrdAggregate` for `diesel::sql_types::Bool` + = note: required because of the requirements on the impl of `diesel::Expression` for `diesel::expression::functions::aggregate_ordering::min::min>` + = note: required because of the requirements on the impl of `diesel::query_dsl::select_dsl::SelectDsl>>` for `stuff::table` diff --git a/diesel_compile_tests/tests/compile-fail/pg_on_conflict_requires_valid_conflict_target.rs b/diesel_compile_tests/tests/fail/pg_on_conflict_requires_valid_conflict_target.rs similarity index 74% rename from diesel_compile_tests/tests/compile-fail/pg_on_conflict_requires_valid_conflict_target.rs rename to diesel_compile_tests/tests/fail/pg_on_conflict_requires_valid_conflict_target.rs index 8c2e2b9537e0..80168e29417d 100644 --- a/diesel_compile_tests/tests/compile-fail/pg_on_conflict_requires_valid_conflict_target.rs +++ b/diesel_compile_tests/tests/fail/pg_on_conflict_requires_valid_conflict_target.rs @@ -1,7 +1,6 @@ -#[macro_use] extern crate diesel; +extern crate diesel; use diesel::*; -use diesel::upsert::*; table! { users { @@ -33,15 +32,12 @@ fn main() { let column_from_other_table = insert_into(users) .values(&NewUser("Sean")) .on_conflict(posts::id); - //~^ ERROR type mismatch resolving `::Table == users::table` let expression_using_column_from_other_table = insert_into(users) .values(&NewUser("Sean")) .on_conflict(lower(posts::title)); - //~^ ERROR the trait bound `lower::lower: diesel::Column` is not satisfied let random_non_expression = insert_into(users) .values(&NewUser("Sean")) .on_conflict("id"); - //~^ ERROR the trait bound `&str: diesel::Column` is not satisfied } diff --git a/diesel_compile_tests/tests/fail/pg_on_conflict_requires_valid_conflict_target.stderr b/diesel_compile_tests/tests/fail/pg_on_conflict_requires_valid_conflict_target.stderr new file mode 100644 index 000000000000..8a9bd617ec01 --- /dev/null +++ b/diesel_compile_tests/tests/fail/pg_on_conflict_requires_valid_conflict_target.stderr @@ -0,0 +1,21 @@ +error[E0271]: type mismatch resolving `::Table == users::table` + --> $DIR/pg_on_conflict_requires_valid_conflict_target.rs:34:10 + | +34 | .on_conflict(posts::id); + | ^^^^^^^^^^^ expected struct `posts::table`, found struct `users::table` + +error[E0277]: the trait bound `lower::lower: diesel::Column` is not satisfied + --> $DIR/pg_on_conflict_requires_valid_conflict_target.rs:38:22 + | +38 | .on_conflict(lower(posts::title)); + | ^^^^^^^^^^^^^^^^^^^ the trait `diesel::Column` is not implemented for `lower::lower` + | + = note: required because of the requirements on the impl of `diesel::query_builder::upsert::on_conflict_target::OnConflictTarget` for `diesel::query_builder::upsert::on_conflict_target::ConflictTarget>` + +error[E0277]: the trait bound `&str: diesel::Column` is not satisfied + --> $DIR/pg_on_conflict_requires_valid_conflict_target.rs:42:22 + | +42 | .on_conflict("id"); + | ^^^^ the trait `diesel::Column` is not implemented for `&str` + | + = note: required because of the requirements on the impl of `diesel::query_builder::upsert::on_conflict_target::OnConflictTarget` for `diesel::query_builder::upsert::on_conflict_target::ConflictTarget<&str>` diff --git a/diesel_compile_tests/tests/compile-fail/pg_specific_expressions_cant_be_used_in_a_sqlite_query.rs b/diesel_compile_tests/tests/fail/pg_specific_expressions_cant_be_used_in_a_sqlite_query.rs similarity index 68% rename from diesel_compile_tests/tests/compile-fail/pg_specific_expressions_cant_be_used_in_a_sqlite_query.rs rename to diesel_compile_tests/tests/fail/pg_specific_expressions_cant_be_used_in_a_sqlite_query.rs index 5a64265f5140..34e8002c517d 100644 --- a/diesel_compile_tests/tests/compile-fail/pg_specific_expressions_cant_be_used_in_a_sqlite_query.rs +++ b/diesel_compile_tests/tests/fail/pg_specific_expressions_cant_be_used_in_a_sqlite_query.rs @@ -1,4 +1,4 @@ -#[macro_use] extern crate diesel; +extern crate diesel; use diesel::*; use diesel::sql_types::*; @@ -25,15 +25,11 @@ fn main() { users.select(id).filter(name.eq(any(Vec::::new()))) .load::(&connection); - //~^ ERROR type mismatch resolving `::Backend == diesel::pg::Pg` users.select(id).filter(name.is_not_distinct_from("Sean")) .load::(&connection); - //~^ ERROR type mismatch resolving `::Backend == diesel::pg::Pg` users.select(id).filter(now.eq(now.at_time_zone("UTC"))) .load::(&connection); - //~^ ERROR type mismatch resolving `::Backend == diesel::pg::Pg` insert_into(users).values(&NewUser("Sean")) .on_conflict(on_constraint("name")) .execute(&connection); - //~^ ERROR no method named `execute` found } diff --git a/diesel_compile_tests/tests/fail/pg_specific_expressions_cant_be_used_in_a_sqlite_query.stderr b/diesel_compile_tests/tests/fail/pg_specific_expressions_cant_be_used_in_a_sqlite_query.stderr new file mode 100644 index 000000000000..1e4f2febed09 --- /dev/null +++ b/diesel_compile_tests/tests/fail/pg_specific_expressions_cant_be_used_in_a_sqlite_query.stderr @@ -0,0 +1,45 @@ +error[E0271]: type mismatch resolving `::Backend == diesel::pg::Pg` + --> $DIR/pg_specific_expressions_cant_be_used_in_a_sqlite_query.rs:27:10 + | +27 | .load::(&connection); + | ^^^^ expected struct `diesel::sqlite::Sqlite`, found struct `diesel::pg::Pg` + | + = note: required because of the requirements on the impl of `diesel::query_dsl::LoadQuery` for `diesel::query_builder::SelectStatement, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::WhereClause, std::vec::Vec>>>>>>` + +error[E0271]: type mismatch resolving `::Backend == diesel::pg::Pg` + --> $DIR/pg_specific_expressions_cant_be_used_in_a_sqlite_query.rs:29:10 + | +29 | .load::(&connection); + | ^^^^ expected struct `diesel::sqlite::Sqlite`, found struct `diesel::pg::Pg` + | + = note: required because of the requirements on the impl of `diesel::query_dsl::LoadQuery` for `diesel::query_builder::SelectStatement, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::WhereClause>>>>` + +error[E0271]: type mismatch resolving `::Backend == diesel::pg::Pg` + --> $DIR/pg_specific_expressions_cant_be_used_in_a_sqlite_query.rs:31:10 + | +31 | .load::(&connection); + | ^^^^ expected struct `diesel::sqlite::Sqlite`, found struct `diesel::pg::Pg` + | + = note: required because of the requirements on the impl of `diesel::query_dsl::LoadQuery` for `diesel::query_builder::SelectStatement, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::WhereClause>>>>>>` + +error[E0599]: no method named `execute` found for struct `diesel::upsert::IncompleteOnConflict>,), users::table>>, diesel::query_builder::upsert::on_conflict_target::ConflictTarget>>` in the current scope + --> $DIR/pg_specific_expressions_cant_be_used_in_a_sqlite_query.rs:34:10 + | +34 | .execute(&connection); + | ^^^^^^^ method not found in `diesel::upsert::IncompleteOnConflict>,), users::table>>, diesel::query_builder::upsert::on_conflict_target::ConflictTarget>>` + | + ::: $WORKSPACE/diesel/src/upsert/on_conflict_extension.rs + | + | pub struct IncompleteOnConflict { + | --------------------------------------------- + | | + | doesn't satisfy `_: diesel::RunQueryDsl<_>` + | doesn't satisfy `_: diesel::Table` + | + = note: the method `execute` exists but the following trait bounds were not satisfied: + `diesel::upsert::IncompleteOnConflict>,), users::table>>, diesel::query_builder::upsert::on_conflict_target::ConflictTarget>>: diesel::Table` + which is required by `diesel::upsert::IncompleteOnConflict>,), users::table>>, diesel::query_builder::upsert::on_conflict_target::ConflictTarget>>: diesel::RunQueryDsl<_>` + `&diesel::upsert::IncompleteOnConflict>,), users::table>>, diesel::query_builder::upsert::on_conflict_target::ConflictTarget>>: diesel::Table` + which is required by `&diesel::upsert::IncompleteOnConflict>,), users::table>>, diesel::query_builder::upsert::on_conflict_target::ConflictTarget>>: diesel::RunQueryDsl<_>` + `&mut diesel::upsert::IncompleteOnConflict>,), users::table>>, diesel::query_builder::upsert::on_conflict_target::ConflictTarget>>: diesel::Table` + which is required by `&mut diesel::upsert::IncompleteOnConflict>,), users::table>>, diesel::query_builder::upsert::on_conflict_target::ConflictTarget>>: diesel::RunQueryDsl<_>` diff --git a/diesel_compile_tests/tests/compile-fail/pg_upsert_do_update_requires_valid_update.rs b/diesel_compile_tests/tests/fail/pg_upsert_do_update_requires_valid_update.rs similarity index 86% rename from diesel_compile_tests/tests/compile-fail/pg_upsert_do_update_requires_valid_update.rs rename to diesel_compile_tests/tests/fail/pg_upsert_do_update_requires_valid_update.rs index 6240ef4040a2..c03a796080a6 100644 --- a/diesel_compile_tests/tests/compile-fail/pg_upsert_do_update_requires_valid_update.rs +++ b/diesel_compile_tests/tests/fail/pg_upsert_do_update_requires_valid_update.rs @@ -1,4 +1,4 @@ -#[macro_use] extern crate diesel; +extern crate diesel; use diesel::*; use diesel::upsert::*; @@ -35,7 +35,6 @@ fn main() { .on_conflict(id) .do_update() .execute(&connection); - //~^ ERROR no method named `execute` // Update column from other table insert_into(users) @@ -43,7 +42,6 @@ fn main() { .on_conflict(id) .do_update() .set(posts::title.eq("Sean")); - //~^ ERROR E0271 // Update column with value that is not selectable @@ -52,7 +50,6 @@ fn main() { .on_conflict(id) .do_update() .set(name.eq(posts::title)); - //~^ ERROR E0277 // Update column with excluded value that is not selectable insert_into(users) @@ -60,7 +57,6 @@ fn main() { .on_conflict(id) .do_update() .set(name.eq(excluded(posts::title))); - //~^ ERROR type mismatch resolving `::Table == users::table` // Update column with excluded value of wrong type insert_into(users) @@ -68,7 +64,6 @@ fn main() { .on_conflict(id) .do_update() .set(name.eq(excluded(id))); - //~^ ERROR E0271 // Excluded is only valid in upsert // FIXME: This should not compile diff --git a/diesel_compile_tests/tests/fail/pg_upsert_do_update_requires_valid_update.stderr b/diesel_compile_tests/tests/fail/pg_upsert_do_update_requires_valid_update.stderr new file mode 100644 index 000000000000..ff106c0d9f1f --- /dev/null +++ b/diesel_compile_tests/tests/fail/pg_upsert_do_update_requires_valid_update.stderr @@ -0,0 +1,54 @@ +error[E0599]: no method named `execute` found for struct `diesel::upsert::IncompleteDoUpdate>,), users::table>>, diesel::query_builder::upsert::on_conflict_target::ConflictTarget>` in the current scope + --> $DIR/pg_upsert_do_update_requires_valid_update.rs:37:10 + | +37 | .execute(&connection); + | ^^^^^^^ method not found in `diesel::upsert::IncompleteDoUpdate>,), users::table>>, diesel::query_builder::upsert::on_conflict_target::ConflictTarget>` + | + ::: $WORKSPACE/diesel/src/upsert/on_conflict_extension.rs + | + | pub struct IncompleteDoUpdate { + | ------------------------------------------- + | | + | doesn't satisfy `_: diesel::RunQueryDsl<_>` + | doesn't satisfy `_: diesel::Table` + | + = note: the method `execute` exists but the following trait bounds were not satisfied: + `diesel::upsert::IncompleteDoUpdate>,), users::table>>, diesel::query_builder::upsert::on_conflict_target::ConflictTarget>: diesel::Table` + which is required by `diesel::upsert::IncompleteDoUpdate>,), users::table>>, diesel::query_builder::upsert::on_conflict_target::ConflictTarget>: diesel::RunQueryDsl<_>` + `&diesel::upsert::IncompleteDoUpdate>,), users::table>>, diesel::query_builder::upsert::on_conflict_target::ConflictTarget>: diesel::Table` + which is required by `&diesel::upsert::IncompleteDoUpdate>,), users::table>>, diesel::query_builder::upsert::on_conflict_target::ConflictTarget>: diesel::RunQueryDsl<_>` + `&mut diesel::upsert::IncompleteDoUpdate>,), users::table>>, diesel::query_builder::upsert::on_conflict_target::ConflictTarget>: diesel::Table` + which is required by `&mut diesel::upsert::IncompleteDoUpdate>,), users::table>>, diesel::query_builder::upsert::on_conflict_target::ConflictTarget>: diesel::RunQueryDsl<_>` + +error[E0271]: type mismatch resolving `>> as diesel::AsChangeset>::Target == users::table` + --> $DIR/pg_upsert_do_update_requires_valid_update.rs:44:10 + | +44 | .set(posts::title.eq("Sean")); + | ^^^ expected struct `posts::table`, found struct `users::table` + +error[E0277]: the trait bound `users::table: diesel::query_source::AppearsInFromClause` is not satisfied + --> $DIR/pg_upsert_do_update_requires_valid_update.rs:52:10 + | +52 | .set(name.eq(posts::title)); + | ^^^ the trait `diesel::query_source::AppearsInFromClause` is not implemented for `users::table` + | + = help: the following implementations were found: + > + = note: required because of the requirements on the impl of `diesel::AppearsOnTable` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::AsChangeset` for `diesel::expression::operators::Eq` + +error[E0271]: type mismatch resolving `::Table == users::table` + --> $DIR/pg_upsert_do_update_requires_valid_update.rs:59:10 + | +59 | .set(name.eq(excluded(posts::title))); + | ^^^ expected struct `posts::table`, found struct `users::table` + | + = note: required because of the requirements on the impl of `diesel::AsChangeset` for `diesel::expression::operators::Eq>` + +error[E0271]: type mismatch resolving ` as diesel::Expression>::SqlType == diesel::sql_types::Text` + --> $DIR/pg_upsert_do_update_requires_valid_update.rs:66:19 + | +66 | .set(name.eq(excluded(id))); + | ^^ expected struct `diesel::sql_types::Integer`, found struct `diesel::sql_types::Text` + | + = note: required because of the requirements on the impl of `diesel::expression::as_expression_impl::AsExpressionHelper` for `diesel::expression::as_expression_impl::ExpressionImplHelper, diesel::sql_types::is_nullable::NotNull, diesel::sql_types::is_nullable::NotNull>` diff --git a/diesel_compile_tests/tests/ui/queryable_by_name_requires_table_name_or_sql_type_annotation.rs b/diesel_compile_tests/tests/fail/queryable_by_name_requires_table_name_or_sql_type_annotation.rs similarity index 80% rename from diesel_compile_tests/tests/ui/queryable_by_name_requires_table_name_or_sql_type_annotation.rs rename to diesel_compile_tests/tests/fail/queryable_by_name_requires_table_name_or_sql_type_annotation.rs index 935000545f30..ee5be5efa8bd 100644 --- a/diesel_compile_tests/tests/ui/queryable_by_name_requires_table_name_or_sql_type_annotation.rs +++ b/diesel_compile_tests/tests/fail/queryable_by_name_requires_table_name_or_sql_type_annotation.rs @@ -1,4 +1,5 @@ -#[macro_use] extern crate diesel; +#[macro_use] +extern crate diesel; #[derive(QueryableByName)] struct Foo { diff --git a/diesel_compile_tests/tests/ui/queryable_by_name_requires_table_name_or_sql_type_annotation.stderr b/diesel_compile_tests/tests/fail/queryable_by_name_requires_table_name_or_sql_type_annotation.stderr similarity index 83% rename from diesel_compile_tests/tests/ui/queryable_by_name_requires_table_name_or_sql_type_annotation.stderr rename to diesel_compile_tests/tests/fail/queryable_by_name_requires_table_name_or_sql_type_annotation.stderr index 854455ef05b0..4269c2edf34a 100644 --- a/diesel_compile_tests/tests/ui/queryable_by_name_requires_table_name_or_sql_type_annotation.stderr +++ b/diesel_compile_tests/tests/fail/queryable_by_name_requires_table_name_or_sql_type_annotation.stderr @@ -1,46 +1,43 @@ error: Cannot determine the SQL type of foo - --> $DIR/queryable_by_name_requires_table_name_or_sql_type_annotation.rs:5:5 + --> $DIR/queryable_by_name_requires_table_name_or_sql_type_annotation.rs:6:5 | -5 | foo: i32, +6 | foo: i32, | ^^^^^^^^ | = help: Your struct must either be annotated with `#[table_name = "foo"]` or have all of its fields annotated with `#[sql_type = "Integer"]` error: Cannot determine the SQL type of bar - --> $DIR/queryable_by_name_requires_table_name_or_sql_type_annotation.rs:6:5 + --> $DIR/queryable_by_name_requires_table_name_or_sql_type_annotation.rs:7:5 | -6 | bar: String, +7 | bar: String, | ^^^^^^^^^^^ | = help: Your struct must either be annotated with `#[table_name = "foo"]` or have all of its fields annotated with `#[sql_type = "Integer"]` error: All fields of tuple structs must be annotated with `#[column_name]` - --> $DIR/queryable_by_name_requires_table_name_or_sql_type_annotation.rs:10:12 + --> $DIR/queryable_by_name_requires_table_name_or_sql_type_annotation.rs:11:12 | -10 | struct Bar(i32, String); +11 | struct Bar(i32, String); | ^^^ error: All fields of tuple structs must be annotated with `#[column_name]` - --> $DIR/queryable_by_name_requires_table_name_or_sql_type_annotation.rs:10:17 + --> $DIR/queryable_by_name_requires_table_name_or_sql_type_annotation.rs:11:17 | -10 | struct Bar(i32, String); +11 | struct Bar(i32, String); | ^^^^^^ error: Cannot determine the SQL type of field - --> $DIR/queryable_by_name_requires_table_name_or_sql_type_annotation.rs:10:12 + --> $DIR/queryable_by_name_requires_table_name_or_sql_type_annotation.rs:11:12 | -10 | struct Bar(i32, String); +11 | struct Bar(i32, String); | ^^^ | = help: Your struct must either be annotated with `#[table_name = "foo"]` or have all of its fields annotated with `#[sql_type = "Integer"]` error: Cannot determine the SQL type of field - --> $DIR/queryable_by_name_requires_table_name_or_sql_type_annotation.rs:10:17 + --> $DIR/queryable_by_name_requires_table_name_or_sql_type_annotation.rs:11:17 | -10 | struct Bar(i32, String); +11 | struct Bar(i32, String); | ^^^^^^ | = help: Your struct must either be annotated with `#[table_name = "foo"]` or have all of its fields annotated with `#[sql_type = "Integer"]` - -error: aborting due to 6 previous errors - diff --git a/diesel_compile_tests/tests/ui/queryable_type_missmatch.rs b/diesel_compile_tests/tests/fail/queryable_type_missmatch.rs similarity index 91% rename from diesel_compile_tests/tests/ui/queryable_type_missmatch.rs rename to diesel_compile_tests/tests/fail/queryable_type_missmatch.rs index c767135a065b..4ba3c639c188 100644 --- a/diesel_compile_tests/tests/ui/queryable_type_missmatch.rs +++ b/diesel_compile_tests/tests/fail/queryable_type_missmatch.rs @@ -14,7 +14,7 @@ table! { struct User { id: i32, name: String, - bio: Option + bio: Option, } #[derive(Queryable)] @@ -35,21 +35,21 @@ struct UserWithToManyFields { struct UserWrongOrder { name: String, id: i32, - bio: Option + bio: Option, } #[derive(Queryable)] struct UserTypeMissmatch { id: i32, name: i32, - bio: Option + bio: Option, } #[derive(Queryable)] struct UserNullableTypeMissmatch { id: i32, name: String, - bio: Option + bio: Option, } fn test(conn: &PgConnection) { @@ -67,5 +67,4 @@ fn test(conn: &PgConnection) { let _ = users::table.load::(conn); } - fn main() {} diff --git a/diesel_compile_tests/tests/ui/queryable_type_missmatch.stderr b/diesel_compile_tests/tests/fail/queryable_type_missmatch.stderr similarity index 97% rename from diesel_compile_tests/tests/ui/queryable_type_missmatch.stderr rename to diesel_compile_tests/tests/fail/queryable_type_missmatch.stderr index adb85ae8d7fc..09986a5789d6 100644 --- a/diesel_compile_tests/tests/ui/queryable_type_missmatch.stderr +++ b/diesel_compile_tests/tests/fail/queryable_type_missmatch.stderr @@ -43,7 +43,3 @@ error[E0277]: the trait bound `(i32, i32, std::option::Option), _>` for `UserTypeMissmatch` = note: required because of the requirements on the impl of `diesel::deserialize::FromSqlRow<(diesel::sql_types::Integer, diesel::sql_types::Text, diesel::sql_types::Nullable), _>` for `UserTypeMissmatch` = note: required because of the requirements on the impl of `diesel::query_dsl::LoadQuery<_, UserTypeMissmatch>` for `users::table` - -error: aborting due to 4 previous errors - -For more information about this error, try `rustc --explain E0277`. diff --git a/diesel_compile_tests/tests/compile-fail/returning_cannot_be_called_twice.rs b/diesel_compile_tests/tests/fail/returning_cannot_be_called_twice.rs similarity index 79% rename from diesel_compile_tests/tests/compile-fail/returning_cannot_be_called_twice.rs rename to diesel_compile_tests/tests/fail/returning_cannot_be_called_twice.rs index ce6c112f9cb7..8531b8850b76 100644 --- a/diesel_compile_tests/tests/compile-fail/returning_cannot_be_called_twice.rs +++ b/diesel_compile_tests/tests/fail/returning_cannot_be_called_twice.rs @@ -1,4 +1,4 @@ -#[macro_use] extern crate diesel; +extern crate diesel; use diesel::*; @@ -21,17 +21,14 @@ fn main() { let query = delete(users.filter(name.eq("Bill"))) .returning(id); query.returning(name); - //~^ ERROR: no method named `returning` let query = insert_into(users) .values(&NewUser("Hello".into())) .returning(id); query.returning(name); - //~^ ERROR: no method named `returning` let query = update(users) .set(name.eq("Bill")) .returning(id); query.returning(name); - //~^ ERROR: no method named `returning` } diff --git a/diesel_compile_tests/tests/fail/returning_cannot_be_called_twice.stderr b/diesel_compile_tests/tests/fail/returning_cannot_be_called_twice.stderr new file mode 100644 index 000000000000..898899d7d59c --- /dev/null +++ b/diesel_compile_tests/tests/fail/returning_cannot_be_called_twice.stderr @@ -0,0 +1,17 @@ +error[E0599]: no method named `returning` found for struct `diesel::query_builder::DeleteStatement>>>, diesel::query_builder::returning_clause::ReturningClause>` in the current scope + --> $DIR/returning_cannot_be_called_twice.rs:23:11 + | +23 | query.returning(name); + | ^^^^^^^^^ private field, not a method + +error[E0599]: no method named `returning` found for struct `diesel::query_builder::InsertStatement>,), users::table>, diesel::query_builder::insert_statement::Insert, diesel::query_builder::returning_clause::ReturningClause>` in the current scope + --> $DIR/returning_cannot_be_called_twice.rs:28:11 + | +28 | query.returning(name); + | ^^^^^^^^^ private field, not a method + +error[E0599]: no method named `returning` found for struct `diesel::query_builder::UpdateStatement>, diesel::query_builder::returning_clause::ReturningClause>` in the current scope + --> $DIR/returning_cannot_be_called_twice.rs:33:11 + | +33 | query.returning(name); + | ^^^^^^^^^ private field, not a method diff --git a/diesel_compile_tests/tests/compile-fail/returning_clause_requires_selectable_expression.rs b/diesel_compile_tests/tests/fail/returning_clause_requires_selectable_expression.rs similarity index 85% rename from diesel_compile_tests/tests/compile-fail/returning_clause_requires_selectable_expression.rs rename to diesel_compile_tests/tests/fail/returning_clause_requires_selectable_expression.rs index 55e92c55594e..f8d1cd993ae2 100644 --- a/diesel_compile_tests/tests/compile-fail/returning_clause_requires_selectable_expression.rs +++ b/diesel_compile_tests/tests/fail/returning_clause_requires_selectable_expression.rs @@ -1,4 +1,3 @@ -#[macro_use] extern crate diesel; use diesel::*; @@ -26,15 +25,12 @@ fn main() { delete(users::table.filter(users::columns::name.eq("Bill"))) .returning(non_users::columns::noname); - //~^ ERROR SelectableExpression insert_into(users::table) .values(&NewUser("Hello".into())) .returning(non_users::columns::noname); - //~^ ERROR SelectableExpression update(users::table) .set(users::columns::name.eq("Bill")) .returning(non_users::columns::noname); - //~^ ERROR SelectableExpression } diff --git a/diesel_compile_tests/tests/fail/returning_clause_requires_selectable_expression.stderr b/diesel_compile_tests/tests/fail/returning_clause_requires_selectable_expression.stderr new file mode 100644 index 000000000000..d11fd66e6fd3 --- /dev/null +++ b/diesel_compile_tests/tests/fail/returning_clause_requires_selectable_expression.stderr @@ -0,0 +1,40 @@ +error[E0277]: the trait bound `non_users::columns::noname: diesel::SelectableExpression` is not satisfied + --> $DIR/returning_clause_requires_selectable_expression.rs:27:20 + | +27 | .returning(non_users::columns::noname); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `diesel::SelectableExpression` is not implemented for `non_users::columns::noname` + | + = help: the following implementations were found: + >> + >> + >> + >> + > + +error[E0277]: the trait bound `non_users::columns::noname: diesel::SelectableExpression` is not satisfied + --> $DIR/returning_clause_requires_selectable_expression.rs:31:20 + | +31 | .returning(non_users::columns::noname); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `diesel::SelectableExpression` is not implemented for `non_users::columns::noname` + | + = help: the following implementations were found: + >> + >> + >> + >> + > + = note: required because of the requirements on the impl of `diesel::query_builder::Query` for `diesel::query_builder::InsertStatement>,), users::table>, diesel::query_builder::insert_statement::Insert, diesel::query_builder::returning_clause::ReturningClause>` + +error[E0277]: the trait bound `non_users::columns::noname: diesel::SelectableExpression` is not satisfied + --> $DIR/returning_clause_requires_selectable_expression.rs:35:20 + | +35 | .returning(non_users::columns::noname); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `diesel::SelectableExpression` is not implemented for `non_users::columns::noname` + | + = help: the following implementations were found: + >> + >> + >> + >> + > + = note: required because of the requirements on the impl of `diesel::query_builder::Query` for `diesel::query_builder::UpdateStatement>, diesel::query_builder::returning_clause::ReturningClause>` diff --git a/diesel_compile_tests/tests/compile-fail/right_side_of_left_join_requires_nullable.rs b/diesel_compile_tests/tests/fail/right_side_of_left_join_requires_nullable.rs similarity index 86% rename from diesel_compile_tests/tests/compile-fail/right_side_of_left_join_requires_nullable.rs rename to diesel_compile_tests/tests/fail/right_side_of_left_join_requires_nullable.rs index 00a08bd4d83c..247570538bbe 100644 --- a/diesel_compile_tests/tests/compile-fail/right_side_of_left_join_requires_nullable.rs +++ b/diesel_compile_tests/tests/fail/right_side_of_left_join_requires_nullable.rs @@ -1,4 +1,4 @@ -#[macro_use] extern crate diesel; +extern crate diesel; use diesel::*; use diesel::sql_types::Text; @@ -39,19 +39,14 @@ fn direct_joins() { // Invalid, only Nullable is selectable let _ = join.select(posts::title); - //~^ ERROR E0271 - //~| ERROR E0277 // Valid let _ = join.select(posts::title.nullable()); // Valid -- NULL to a function will return null let _ = join.select(lower(posts::title).nullable()); // Invalid, only Nullable<title> is selectable let _ = join.select(lower(posts::title)); - //~^ ERROR E0271 - //~| ERROR E0277 // Invalid, Nullable<title> is selectable, but lower expects not-null let _ = join.select(lower(posts::title.nullable())); - //~^ ERROR E0277 } fn nested_outer_joins_left_associative() { @@ -60,19 +55,14 @@ fn nested_outer_joins_left_associative() { // Invalid, only Nullable<title> is selectable let _ = join.select(posts::title); - //~^ ERROR E0271 - //~| ERROR E0277 // Valid let _ = join.select(posts::title.nullable()); // Valid -- NULL to a function will return null let _ = join.select(lower(posts::title).nullable()); // Invalid, only Nullable<title> is selectable let _ = join.select(lower(posts::title)); - //~^ ERROR E0271 - //~| ERROR E0277 // Invalid, Nullable<title> is selectable, but lower expects not-null let _ = join.select(lower(posts::title.nullable())); - //~^ ERROR E0277 } fn nested_mixed_joins_left_associative() { @@ -80,19 +70,14 @@ fn nested_mixed_joins_left_associative() { // Invalid, only Nullable<title> is selectable let _ = join.select(posts::title); - //~^ ERROR E0271 - //~| ERROR E0277 // Valid let _ = join.select(posts::title.nullable()); // Valid -- NULL to a function will return null let _ = join.select(lower(posts::title).nullable()); // Invalid, only Nullable<title> is selectable let _ = join.select(lower(posts::title)); - //~^ ERROR E0271 - //~| ERROR E0277 // Invalid, Nullable<title> is selectable, but lower expects not-null let _ = join.select(lower(posts::title.nullable())); - //~^ ERROR E0277 } fn nested_outer_joins_right_associative() { @@ -100,19 +85,14 @@ fn nested_outer_joins_right_associative() { // Invalid, only Nullable<title> is selectable let _ = join.select(posts::title); - //~^ ERROR E0271 - //~| ERROR E0277 // Valid let _ = join.select(posts::title.nullable()); // Valid -- NULL to a function will return null let _ = join.select(lower(posts::title).nullable()); // Invalid, only Nullable<title> is selectable let _ = join.select(lower(posts::title)); - //~^ ERROR E0271 - //~| ERROR E0277 // Invalid, Nullable<title> is selectable, but lower expects not-null let _ = join.select(lower(posts::title.nullable())); - //~^ ERROR E0277 } fn nested_mixed_joins_right_associative() { @@ -120,17 +100,12 @@ fn nested_mixed_joins_right_associative() { // Invalid, only Nullable<title> is selectable let _ = join.select(posts::title); - //~^ ERROR E0271 - //~| ERROR E0277 // Valid let _ = join.select(posts::title.nullable()); // Valid -- NULL to a function will return null let _ = join.select(lower(posts::title).nullable()); // Invalid, only Nullable<title> is selectable let _ = join.select(lower(posts::title)); - //~^ ERROR E0271 - //~| ERROR E0277 // Invalid, Nullable<title> is selectable, but lower expects not-null let _ = join.select(lower(posts::title.nullable())); - //~^ ERROR E0277 } diff --git a/diesel_compile_tests/tests/fail/right_side_of_left_join_requires_nullable.stderr b/diesel_compile_tests/tests/fail/right_side_of_left_join_requires_nullable.stderr new file mode 100644 index 000000000000..4536e2ce7965 --- /dev/null +++ b/diesel_compile_tests/tests/fail/right_side_of_left_join_requires_nullable.stderr @@ -0,0 +1,372 @@ +error[E0271]: type mismatch resolving `<posts::table as diesel::query_source::AppearsInFromClause<posts::table>>::Count == diesel::query_source::Never` + --> $DIR/right_side_of_left_join_requires_nullable.rs:41:18 + | +41 | let _ = join.select(posts::title); + | ^^^^^^ expected struct `diesel::query_source::Once`, found struct `diesel::query_source::Never` + | + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::query_dsl::select_dsl::SelectDsl<posts::columns::title>` for `diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>` + +error[E0277]: the trait bound `posts::columns::title: diesel::SelectableExpression<users::table>` is not satisfied + --> $DIR/right_side_of_left_join_requires_nullable.rs:41:25 + | +41 | let _ = join.select(posts::title); + | ^^^^^^^^^^^^ the trait `diesel::SelectableExpression<users::table>` is not implemented for `posts::columns::title` + | + = help: the following implementations were found: + <posts::columns::title as diesel::SelectableExpression<diesel::query_builder::SelectStatement<From>>> + <posts::columns::title as diesel::SelectableExpression<diesel::query_source::joins::Join<Left, Right, diesel::query_source::joins::Inner>>> + <posts::columns::title as diesel::SelectableExpression<diesel::query_source::joins::Join<Left, Right, diesel::query_source::joins::LeftOuter>>> + <posts::columns::title as diesel::SelectableExpression<diesel::query_source::joins::JoinOn<Join, On>>> + <posts::columns::title as diesel::SelectableExpression<posts::table>> + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::query_dsl::select_dsl::SelectDsl<posts::columns::title>` for `diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>` + +error[E0271]: type mismatch resolving `<posts::table as diesel::query_source::AppearsInFromClause<posts::table>>::Count == diesel::query_source::Never` + --> $DIR/right_side_of_left_join_requires_nullable.rs:47:18 + | +47 | let _ = join.select(lower(posts::title)); + | ^^^^^^ expected struct `diesel::query_source::Once`, found struct `diesel::query_source::Never` + | + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>` for `lower::lower<posts::columns::title>` + = note: required because of the requirements on the impl of `diesel::query_dsl::select_dsl::SelectDsl<lower::lower<posts::columns::title>>` for `diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>` + +error[E0277]: the trait bound `posts::columns::title: diesel::SelectableExpression<users::table>` is not satisfied + --> $DIR/right_side_of_left_join_requires_nullable.rs:47:25 + | +47 | let _ = join.select(lower(posts::title)); + | ^^^^^^^^^^^^^^^^^^^ the trait `diesel::SelectableExpression<users::table>` is not implemented for `posts::columns::title` + | + = help: the following implementations were found: + <posts::columns::title as diesel::SelectableExpression<diesel::query_builder::SelectStatement<From>>> + <posts::columns::title as diesel::SelectableExpression<diesel::query_source::joins::Join<Left, Right, diesel::query_source::joins::Inner>>> + <posts::columns::title as diesel::SelectableExpression<diesel::query_source::joins::Join<Left, Right, diesel::query_source::joins::LeftOuter>>> + <posts::columns::title as diesel::SelectableExpression<diesel::query_source::joins::JoinOn<Join, On>>> + <posts::columns::title as diesel::SelectableExpression<posts::table>> + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>` for `lower::lower<posts::columns::title>` + = note: required because of the requirements on the impl of `diesel::query_dsl::select_dsl::SelectDsl<lower::lower<posts::columns::title>>` for `diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>` + +error[E0277]: the trait bound `diesel::expression::as_expression_impl::ExpressionImplHelper<diesel::expression::nullable::Nullable<posts::columns::title>, diesel::sql_types::is_nullable::NotNull, diesel::sql_types::is_nullable::IsNullable>: diesel::expression::as_expression_impl::AsExpressionHelper<diesel::sql_types::Text>` is not satisfied + --> $DIR/right_side_of_left_join_requires_nullable.rs:49:25 + | +32 | sql_function!(fn lower(x: Text) -> Text); + | ----------------------------------------- required by this bound in `lower` +... +49 | let _ = join.select(lower(posts::title.nullable())); + | ^^^^^ the trait `diesel::expression::as_expression_impl::AsExpressionHelper<diesel::sql_types::Text>` is not implemented for `diesel::expression::as_expression_impl::ExpressionImplHelper<diesel::expression::nullable::Nullable<posts::columns::title>, diesel::sql_types::is_nullable::NotNull, diesel::sql_types::is_nullable::IsNullable>` + | + = help: the following implementations were found: + <diesel::expression::as_expression_impl::ExpressionImplHelper<T, diesel::sql_types::is_nullable::IsNullable, diesel::sql_types::is_nullable::IsNullable> as diesel::expression::as_expression_impl::AsExpressionHelper<ST>> + <diesel::expression::as_expression_impl::ExpressionImplHelper<T, diesel::sql_types::is_nullable::IsNullable, diesel::sql_types::is_nullable::NotNull> as diesel::expression::as_expression_impl::AsExpressionHelper<ST>> + <diesel::expression::as_expression_impl::ExpressionImplHelper<T, diesel::sql_types::is_nullable::NotNull, diesel::sql_types::is_nullable::NotNull> as diesel::expression::as_expression_impl::AsExpressionHelper<ST>> + = note: required because of the requirements on the impl of `diesel::expression::AsExpression<diesel::sql_types::Text>` for `diesel::expression::nullable::Nullable<posts::columns::title>` + +error[E0271]: type mismatch resolving `<posts::table as diesel::query_source::AppearsInFromClause<posts::table>>::Count == diesel::query_source::Never` + --> $DIR/right_side_of_left_join_requires_nullable.rs:57:18 + | +57 | let _ = join.select(posts::title); + | ^^^^^^ expected struct `diesel::query_source::Once`, found struct `diesel::query_source::Never` + | + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>, pets::table, diesel::query_source::joins::LeftOuter>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>, pets::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<pets::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::query_dsl::select_dsl::SelectDsl<posts::columns::title>` for `diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>, pets::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<pets::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>` + +error[E0277]: the trait bound `posts::columns::title: diesel::SelectableExpression<users::table>` is not satisfied + --> $DIR/right_side_of_left_join_requires_nullable.rs:57:25 + | +57 | let _ = join.select(posts::title); + | ^^^^^^^^^^^^ the trait `diesel::SelectableExpression<users::table>` is not implemented for `posts::columns::title` + | + = help: the following implementations were found: + <posts::columns::title as diesel::SelectableExpression<diesel::query_builder::SelectStatement<From>>> + <posts::columns::title as diesel::SelectableExpression<diesel::query_source::joins::Join<Left, Right, diesel::query_source::joins::Inner>>> + <posts::columns::title as diesel::SelectableExpression<diesel::query_source::joins::Join<Left, Right, diesel::query_source::joins::LeftOuter>>> + <posts::columns::title as diesel::SelectableExpression<diesel::query_source::joins::JoinOn<Join, On>>> + <posts::columns::title as diesel::SelectableExpression<posts::table>> + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>, pets::table, diesel::query_source::joins::LeftOuter>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>, pets::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<pets::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::query_dsl::select_dsl::SelectDsl<posts::columns::title>` for `diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>, pets::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<pets::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>` + +error[E0271]: type mismatch resolving `<posts::table as diesel::query_source::AppearsInFromClause<posts::table>>::Count == diesel::query_source::Never` + --> $DIR/right_side_of_left_join_requires_nullable.rs:63:18 + | +63 | let _ = join.select(lower(posts::title)); + | ^^^^^^ expected struct `diesel::query_source::Once`, found struct `diesel::query_source::Never` + | + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>, pets::table, diesel::query_source::joins::LeftOuter>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>, pets::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<pets::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>, pets::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<pets::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>` for `lower::lower<posts::columns::title>` + = note: required because of the requirements on the impl of `diesel::query_dsl::select_dsl::SelectDsl<lower::lower<posts::columns::title>>` for `diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>, pets::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<pets::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>` + +error[E0277]: the trait bound `posts::columns::title: diesel::SelectableExpression<users::table>` is not satisfied + --> $DIR/right_side_of_left_join_requires_nullable.rs:63:25 + | +63 | let _ = join.select(lower(posts::title)); + | ^^^^^^^^^^^^^^^^^^^ the trait `diesel::SelectableExpression<users::table>` is not implemented for `posts::columns::title` + | + = help: the following implementations were found: + <posts::columns::title as diesel::SelectableExpression<diesel::query_builder::SelectStatement<From>>> + <posts::columns::title as diesel::SelectableExpression<diesel::query_source::joins::Join<Left, Right, diesel::query_source::joins::Inner>>> + <posts::columns::title as diesel::SelectableExpression<diesel::query_source::joins::Join<Left, Right, diesel::query_source::joins::LeftOuter>>> + <posts::columns::title as diesel::SelectableExpression<diesel::query_source::joins::JoinOn<Join, On>>> + <posts::columns::title as diesel::SelectableExpression<posts::table>> + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>, pets::table, diesel::query_source::joins::LeftOuter>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>, pets::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<pets::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>, pets::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<pets::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>` for `lower::lower<posts::columns::title>` + = note: required because of the requirements on the impl of `diesel::query_dsl::select_dsl::SelectDsl<lower::lower<posts::columns::title>>` for `diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>, pets::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<pets::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>` + +error[E0277]: the trait bound `diesel::expression::as_expression_impl::ExpressionImplHelper<diesel::expression::nullable::Nullable<posts::columns::title>, diesel::sql_types::is_nullable::NotNull, diesel::sql_types::is_nullable::IsNullable>: diesel::expression::as_expression_impl::AsExpressionHelper<diesel::sql_types::Text>` is not satisfied + --> $DIR/right_side_of_left_join_requires_nullable.rs:65:25 + | +32 | sql_function!(fn lower(x: Text) -> Text); + | ----------------------------------------- required by this bound in `lower` +... +65 | let _ = join.select(lower(posts::title.nullable())); + | ^^^^^ the trait `diesel::expression::as_expression_impl::AsExpressionHelper<diesel::sql_types::Text>` is not implemented for `diesel::expression::as_expression_impl::ExpressionImplHelper<diesel::expression::nullable::Nullable<posts::columns::title>, diesel::sql_types::is_nullable::NotNull, diesel::sql_types::is_nullable::IsNullable>` + | + = help: the following implementations were found: + <diesel::expression::as_expression_impl::ExpressionImplHelper<T, diesel::sql_types::is_nullable::IsNullable, diesel::sql_types::is_nullable::IsNullable> as diesel::expression::as_expression_impl::AsExpressionHelper<ST>> + <diesel::expression::as_expression_impl::ExpressionImplHelper<T, diesel::sql_types::is_nullable::IsNullable, diesel::sql_types::is_nullable::NotNull> as diesel::expression::as_expression_impl::AsExpressionHelper<ST>> + <diesel::expression::as_expression_impl::ExpressionImplHelper<T, diesel::sql_types::is_nullable::NotNull, diesel::sql_types::is_nullable::NotNull> as diesel::expression::as_expression_impl::AsExpressionHelper<ST>> + = note: required because of the requirements on the impl of `diesel::expression::AsExpression<diesel::sql_types::Text>` for `diesel::expression::nullable::Nullable<posts::columns::title>` + +error[E0271]: type mismatch resolving `<posts::table as diesel::query_source::AppearsInFromClause<posts::table>>::Count == diesel::query_source::Never` + --> $DIR/right_side_of_left_join_requires_nullable.rs:72:18 + | +72 | let _ = join.select(posts::title); + | ^^^^^^ expected struct `diesel::query_source::Once`, found struct `diesel::query_source::Never` + | + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>, pets::table, diesel::query_source::joins::Inner>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>, pets::table, diesel::query_source::joins::Inner>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<pets::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::query_dsl::select_dsl::SelectDsl<posts::columns::title>` for `diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>, pets::table, diesel::query_source::joins::Inner>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<pets::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>` + +error[E0277]: the trait bound `posts::columns::title: diesel::SelectableExpression<users::table>` is not satisfied + --> $DIR/right_side_of_left_join_requires_nullable.rs:72:25 + | +72 | let _ = join.select(posts::title); + | ^^^^^^^^^^^^ the trait `diesel::SelectableExpression<users::table>` is not implemented for `posts::columns::title` + | + = help: the following implementations were found: + <posts::columns::title as diesel::SelectableExpression<diesel::query_builder::SelectStatement<From>>> + <posts::columns::title as diesel::SelectableExpression<diesel::query_source::joins::Join<Left, Right, diesel::query_source::joins::Inner>>> + <posts::columns::title as diesel::SelectableExpression<diesel::query_source::joins::Join<Left, Right, diesel::query_source::joins::LeftOuter>>> + <posts::columns::title as diesel::SelectableExpression<diesel::query_source::joins::JoinOn<Join, On>>> + <posts::columns::title as diesel::SelectableExpression<posts::table>> + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>, pets::table, diesel::query_source::joins::Inner>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>, pets::table, diesel::query_source::joins::Inner>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<pets::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::query_dsl::select_dsl::SelectDsl<posts::columns::title>` for `diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>, pets::table, diesel::query_source::joins::Inner>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<pets::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>` + +error[E0271]: type mismatch resolving `<posts::table as diesel::query_source::AppearsInFromClause<posts::table>>::Count == diesel::query_source::Never` + --> $DIR/right_side_of_left_join_requires_nullable.rs:78:18 + | +78 | let _ = join.select(lower(posts::title)); + | ^^^^^^ expected struct `diesel::query_source::Once`, found struct `diesel::query_source::Never` + | + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>, pets::table, diesel::query_source::joins::Inner>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>, pets::table, diesel::query_source::joins::Inner>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<pets::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>, pets::table, diesel::query_source::joins::Inner>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<pets::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>` for `lower::lower<posts::columns::title>` + = note: required because of the requirements on the impl of `diesel::query_dsl::select_dsl::SelectDsl<lower::lower<posts::columns::title>>` for `diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>, pets::table, diesel::query_source::joins::Inner>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<pets::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>` + +error[E0277]: the trait bound `posts::columns::title: diesel::SelectableExpression<users::table>` is not satisfied + --> $DIR/right_side_of_left_join_requires_nullable.rs:78:25 + | +78 | let _ = join.select(lower(posts::title)); + | ^^^^^^^^^^^^^^^^^^^ the trait `diesel::SelectableExpression<users::table>` is not implemented for `posts::columns::title` + | + = help: the following implementations were found: + <posts::columns::title as diesel::SelectableExpression<diesel::query_builder::SelectStatement<From>>> + <posts::columns::title as diesel::SelectableExpression<diesel::query_source::joins::Join<Left, Right, diesel::query_source::joins::Inner>>> + <posts::columns::title as diesel::SelectableExpression<diesel::query_source::joins::Join<Left, Right, diesel::query_source::joins::LeftOuter>>> + <posts::columns::title as diesel::SelectableExpression<diesel::query_source::joins::JoinOn<Join, On>>> + <posts::columns::title as diesel::SelectableExpression<posts::table>> + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>, pets::table, diesel::query_source::joins::Inner>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>, pets::table, diesel::query_source::joins::Inner>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<pets::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>, pets::table, diesel::query_source::joins::Inner>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<pets::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>` for `lower::lower<posts::columns::title>` + = note: required because of the requirements on the impl of `diesel::query_dsl::select_dsl::SelectDsl<lower::lower<posts::columns::title>>` for `diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>, pets::table, diesel::query_source::joins::Inner>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<pets::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>` + +error[E0277]: the trait bound `diesel::expression::as_expression_impl::ExpressionImplHelper<diesel::expression::nullable::Nullable<posts::columns::title>, diesel::sql_types::is_nullable::NotNull, diesel::sql_types::is_nullable::IsNullable>: diesel::expression::as_expression_impl::AsExpressionHelper<diesel::sql_types::Text>` is not satisfied + --> $DIR/right_side_of_left_join_requires_nullable.rs:80:25 + | +32 | sql_function!(fn lower(x: Text) -> Text); + | ----------------------------------------- required by this bound in `lower` +... +80 | let _ = join.select(lower(posts::title.nullable())); + | ^^^^^ the trait `diesel::expression::as_expression_impl::AsExpressionHelper<diesel::sql_types::Text>` is not implemented for `diesel::expression::as_expression_impl::ExpressionImplHelper<diesel::expression::nullable::Nullable<posts::columns::title>, diesel::sql_types::is_nullable::NotNull, diesel::sql_types::is_nullable::IsNullable>` + | + = help: the following implementations were found: + <diesel::expression::as_expression_impl::ExpressionImplHelper<T, diesel::sql_types::is_nullable::IsNullable, diesel::sql_types::is_nullable::IsNullable> as diesel::expression::as_expression_impl::AsExpressionHelper<ST>> + <diesel::expression::as_expression_impl::ExpressionImplHelper<T, diesel::sql_types::is_nullable::IsNullable, diesel::sql_types::is_nullable::NotNull> as diesel::expression::as_expression_impl::AsExpressionHelper<ST>> + <diesel::expression::as_expression_impl::ExpressionImplHelper<T, diesel::sql_types::is_nullable::NotNull, diesel::sql_types::is_nullable::NotNull> as diesel::expression::as_expression_impl::AsExpressionHelper<ST>> + = note: required because of the requirements on the impl of `diesel::expression::AsExpression<diesel::sql_types::Text>` for `diesel::expression::nullable::Nullable<posts::columns::title>` + +error[E0271]: type mismatch resolving `<diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>> as diesel::query_source::AppearsInFromClause<posts::table>>::Count == diesel::query_source::Never` + --> $DIR/right_side_of_left_join_requires_nullable.rs:87:18 + | +87 | let _ = join.select(posts::title); + | ^^^^^^ expected struct `diesel::query_source::Once`, found struct `diesel::query_source::Never` + | + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::Join<pets::table, diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>, diesel::query_source::joins::LeftOuter>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<pets::table, diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<pets::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::query_dsl::select_dsl::SelectDsl<posts::columns::title>` for `diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<pets::table, diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<pets::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>` + +error[E0277]: the trait bound `posts::columns::title: diesel::SelectableExpression<pets::table>` is not satisfied + --> $DIR/right_side_of_left_join_requires_nullable.rs:87:25 + | +87 | let _ = join.select(posts::title); + | ^^^^^^^^^^^^ the trait `diesel::SelectableExpression<pets::table>` is not implemented for `posts::columns::title` + | + = help: the following implementations were found: + <posts::columns::title as diesel::SelectableExpression<diesel::query_builder::SelectStatement<From>>> + <posts::columns::title as diesel::SelectableExpression<diesel::query_source::joins::Join<Left, Right, diesel::query_source::joins::Inner>>> + <posts::columns::title as diesel::SelectableExpression<diesel::query_source::joins::Join<Left, Right, diesel::query_source::joins::LeftOuter>>> + <posts::columns::title as diesel::SelectableExpression<diesel::query_source::joins::JoinOn<Join, On>>> + <posts::columns::title as diesel::SelectableExpression<posts::table>> + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::Join<pets::table, diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>, diesel::query_source::joins::LeftOuter>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<pets::table, diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<pets::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::query_dsl::select_dsl::SelectDsl<posts::columns::title>` for `diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<pets::table, diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<pets::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>` + +error[E0271]: type mismatch resolving `<diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>> as diesel::query_source::AppearsInFromClause<posts::table>>::Count == diesel::query_source::Never` + --> $DIR/right_side_of_left_join_requires_nullable.rs:93:18 + | +93 | let _ = join.select(lower(posts::title)); + | ^^^^^^ expected struct `diesel::query_source::Once`, found struct `diesel::query_source::Never` + | + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::Join<pets::table, diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>, diesel::query_source::joins::LeftOuter>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<pets::table, diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<pets::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<pets::table, diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<pets::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>` for `lower::lower<posts::columns::title>` + = note: required because of the requirements on the impl of `diesel::query_dsl::select_dsl::SelectDsl<lower::lower<posts::columns::title>>` for `diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<pets::table, diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<pets::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>` + +error[E0277]: the trait bound `posts::columns::title: diesel::SelectableExpression<pets::table>` is not satisfied + --> $DIR/right_side_of_left_join_requires_nullable.rs:93:25 + | +93 | let _ = join.select(lower(posts::title)); + | ^^^^^^^^^^^^^^^^^^^ the trait `diesel::SelectableExpression<pets::table>` is not implemented for `posts::columns::title` + | + = help: the following implementations were found: + <posts::columns::title as diesel::SelectableExpression<diesel::query_builder::SelectStatement<From>>> + <posts::columns::title as diesel::SelectableExpression<diesel::query_source::joins::Join<Left, Right, diesel::query_source::joins::Inner>>> + <posts::columns::title as diesel::SelectableExpression<diesel::query_source::joins::Join<Left, Right, diesel::query_source::joins::LeftOuter>>> + <posts::columns::title as diesel::SelectableExpression<diesel::query_source::joins::JoinOn<Join, On>>> + <posts::columns::title as diesel::SelectableExpression<posts::table>> + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::Join<pets::table, diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>, diesel::query_source::joins::LeftOuter>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<pets::table, diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<pets::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<pets::table, diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<pets::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>` for `lower::lower<posts::columns::title>` + = note: required because of the requirements on the impl of `diesel::query_dsl::select_dsl::SelectDsl<lower::lower<posts::columns::title>>` for `diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<pets::table, diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<pets::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>` + +error[E0277]: the trait bound `diesel::expression::as_expression_impl::ExpressionImplHelper<diesel::expression::nullable::Nullable<posts::columns::title>, diesel::sql_types::is_nullable::NotNull, diesel::sql_types::is_nullable::IsNullable>: diesel::expression::as_expression_impl::AsExpressionHelper<diesel::sql_types::Text>` is not satisfied + --> $DIR/right_side_of_left_join_requires_nullable.rs:95:25 + | +32 | sql_function!(fn lower(x: Text) -> Text); + | ----------------------------------------- required by this bound in `lower` +... +95 | let _ = join.select(lower(posts::title.nullable())); + | ^^^^^ the trait `diesel::expression::as_expression_impl::AsExpressionHelper<diesel::sql_types::Text>` is not implemented for `diesel::expression::as_expression_impl::ExpressionImplHelper<diesel::expression::nullable::Nullable<posts::columns::title>, diesel::sql_types::is_nullable::NotNull, diesel::sql_types::is_nullable::IsNullable>` + | + = help: the following implementations were found: + <diesel::expression::as_expression_impl::ExpressionImplHelper<T, diesel::sql_types::is_nullable::IsNullable, diesel::sql_types::is_nullable::IsNullable> as diesel::expression::as_expression_impl::AsExpressionHelper<ST>> + <diesel::expression::as_expression_impl::ExpressionImplHelper<T, diesel::sql_types::is_nullable::IsNullable, diesel::sql_types::is_nullable::NotNull> as diesel::expression::as_expression_impl::AsExpressionHelper<ST>> + <diesel::expression::as_expression_impl::ExpressionImplHelper<T, diesel::sql_types::is_nullable::NotNull, diesel::sql_types::is_nullable::NotNull> as diesel::expression::as_expression_impl::AsExpressionHelper<ST>> + = note: required because of the requirements on the impl of `diesel::expression::AsExpression<diesel::sql_types::Text>` for `diesel::expression::nullable::Nullable<posts::columns::title>` + +error[E0271]: type mismatch resolving `<posts::table as diesel::query_source::AppearsInFromClause<posts::table>>::Count == diesel::query_source::Never` + --> $DIR/right_side_of_left_join_requires_nullable.rs:102:18 + | +102 | let _ = join.select(posts::title); + | ^^^^^^ expected struct `diesel::query_source::Once`, found struct `diesel::query_source::Never` + | + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::Join<pets::table, diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>, diesel::query_source::joins::Inner>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<pets::table, diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>, diesel::query_source::joins::Inner>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<pets::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::query_dsl::select_dsl::SelectDsl<posts::columns::title>` for `diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<pets::table, diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>, diesel::query_source::joins::Inner>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<pets::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>` + +error[E0277]: the trait bound `posts::columns::title: diesel::SelectableExpression<users::table>` is not satisfied + --> $DIR/right_side_of_left_join_requires_nullable.rs:102:25 + | +102 | let _ = join.select(posts::title); + | ^^^^^^^^^^^^ the trait `diesel::SelectableExpression<users::table>` is not implemented for `posts::columns::title` + | + = help: the following implementations were found: + <posts::columns::title as diesel::SelectableExpression<diesel::query_builder::SelectStatement<From>>> + <posts::columns::title as diesel::SelectableExpression<diesel::query_source::joins::Join<Left, Right, diesel::query_source::joins::Inner>>> + <posts::columns::title as diesel::SelectableExpression<diesel::query_source::joins::Join<Left, Right, diesel::query_source::joins::LeftOuter>>> + <posts::columns::title as diesel::SelectableExpression<diesel::query_source::joins::JoinOn<Join, On>>> + <posts::columns::title as diesel::SelectableExpression<posts::table>> + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::Join<pets::table, diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>, diesel::query_source::joins::Inner>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<pets::table, diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>, diesel::query_source::joins::Inner>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<pets::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::query_dsl::select_dsl::SelectDsl<posts::columns::title>` for `diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<pets::table, diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>, diesel::query_source::joins::Inner>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<pets::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>` + +error[E0271]: type mismatch resolving `<posts::table as diesel::query_source::AppearsInFromClause<posts::table>>::Count == diesel::query_source::Never` + --> $DIR/right_side_of_left_join_requires_nullable.rs:108:18 + | +108 | let _ = join.select(lower(posts::title)); + | ^^^^^^ expected struct `diesel::query_source::Once`, found struct `diesel::query_source::Never` + | + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::Join<pets::table, diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>, diesel::query_source::joins::Inner>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<pets::table, diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>, diesel::query_source::joins::Inner>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<pets::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<pets::table, diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>, diesel::query_source::joins::Inner>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<pets::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>` for `lower::lower<posts::columns::title>` + = note: required because of the requirements on the impl of `diesel::query_dsl::select_dsl::SelectDsl<lower::lower<posts::columns::title>>` for `diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<pets::table, diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>, diesel::query_source::joins::Inner>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<pets::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>` + +error[E0277]: the trait bound `posts::columns::title: diesel::SelectableExpression<users::table>` is not satisfied + --> $DIR/right_side_of_left_join_requires_nullable.rs:108:25 + | +108 | let _ = join.select(lower(posts::title)); + | ^^^^^^^^^^^^^^^^^^^ the trait `diesel::SelectableExpression<users::table>` is not implemented for `posts::columns::title` + | + = help: the following implementations were found: + <posts::columns::title as diesel::SelectableExpression<diesel::query_builder::SelectStatement<From>>> + <posts::columns::title as diesel::SelectableExpression<diesel::query_source::joins::Join<Left, Right, diesel::query_source::joins::Inner>>> + <posts::columns::title as diesel::SelectableExpression<diesel::query_source::joins::Join<Left, Right, diesel::query_source::joins::LeftOuter>>> + <posts::columns::title as diesel::SelectableExpression<diesel::query_source::joins::JoinOn<Join, On>>> + <posts::columns::title as diesel::SelectableExpression<posts::table>> + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::Join<pets::table, diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>, diesel::query_source::joins::Inner>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<pets::table, diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>, diesel::query_source::joins::Inner>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<pets::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<pets::table, diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>, diesel::query_source::joins::Inner>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<pets::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>` for `lower::lower<posts::columns::title>` + = note: required because of the requirements on the impl of `diesel::query_dsl::select_dsl::SelectDsl<lower::lower<posts::columns::title>>` for `diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<pets::table, diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::LeftOuter>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>, diesel::query_source::joins::Inner>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<pets::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>>` + +error[E0277]: the trait bound `diesel::expression::as_expression_impl::ExpressionImplHelper<diesel::expression::nullable::Nullable<posts::columns::title>, diesel::sql_types::is_nullable::NotNull, diesel::sql_types::is_nullable::IsNullable>: diesel::expression::as_expression_impl::AsExpressionHelper<diesel::sql_types::Text>` is not satisfied + --> $DIR/right_side_of_left_join_requires_nullable.rs:110:25 + | +32 | sql_function!(fn lower(x: Text) -> Text); + | ----------------------------------------- required by this bound in `lower` +... +110 | let _ = join.select(lower(posts::title.nullable())); + | ^^^^^ the trait `diesel::expression::as_expression_impl::AsExpressionHelper<diesel::sql_types::Text>` is not implemented for `diesel::expression::as_expression_impl::ExpressionImplHelper<diesel::expression::nullable::Nullable<posts::columns::title>, diesel::sql_types::is_nullable::NotNull, diesel::sql_types::is_nullable::IsNullable>` + | + = help: the following implementations were found: + <diesel::expression::as_expression_impl::ExpressionImplHelper<T, diesel::sql_types::is_nullable::IsNullable, diesel::sql_types::is_nullable::IsNullable> as diesel::expression::as_expression_impl::AsExpressionHelper<ST>> + <diesel::expression::as_expression_impl::ExpressionImplHelper<T, diesel::sql_types::is_nullable::IsNullable, diesel::sql_types::is_nullable::NotNull> as diesel::expression::as_expression_impl::AsExpressionHelper<ST>> + <diesel::expression::as_expression_impl::ExpressionImplHelper<T, diesel::sql_types::is_nullable::NotNull, diesel::sql_types::is_nullable::NotNull> as diesel::expression::as_expression_impl::AsExpressionHelper<ST>> + = note: required because of the requirements on the impl of `diesel::expression::AsExpression<diesel::sql_types::Text>` for `diesel::expression::nullable::Nullable<posts::columns::title>` diff --git a/diesel_compile_tests/tests/compile-fail/select_carries_correct_result_type_info.rs b/diesel_compile_tests/tests/fail/select_carries_correct_result_type_info.rs similarity index 62% rename from diesel_compile_tests/tests/compile-fail/select_carries_correct_result_type_info.rs rename to diesel_compile_tests/tests/fail/select_carries_correct_result_type_info.rs index f01f5be9c9af..c14f608d0863 100644 --- a/diesel_compile_tests/tests/compile-fail/select_carries_correct_result_type_info.rs +++ b/diesel_compile_tests/tests/fail/select_carries_correct_result_type_info.rs @@ -1,4 +1,3 @@ -#[macro_use] extern crate diesel; use diesel::*; @@ -18,7 +17,5 @@ fn main() { let select_name = users.select(name); let ids = select_name.load::<i32>(&connection); - //~^ ERROR the trait bound `i32: diesel::deserialize::FromSql<diesel::sql_types::Text, _>` is not satisfied let names = select_id.load::<String>(&connection); - //~^ ERROR the trait bound `*const str: diesel::deserialize::FromSql<diesel::sql_types::Integer, _>` is not satisfied } diff --git a/diesel_compile_tests/tests/fail/select_carries_correct_result_type_info.stderr b/diesel_compile_tests/tests/fail/select_carries_correct_result_type_info.stderr new file mode 100644 index 000000000000..9e188b91ddb9 --- /dev/null +++ b/diesel_compile_tests/tests/fail/select_carries_correct_result_type_info.stderr @@ -0,0 +1,30 @@ +error[E0277]: the trait bound `i32: diesel::deserialize::FromSql<diesel::sql_types::Text, _>` is not satisfied + --> $DIR/select_carries_correct_result_type_info.rs:19:27 + | +19 | let ids = select_name.load::<i32>(&connection); + | ^^^^ the trait `diesel::deserialize::FromSql<diesel::sql_types::Text, _>` is not implemented for `i32` + | + = help: the following implementations were found: + <i32 as diesel::deserialize::FromSql<diesel::sql_types::Integer, DB>> + <i32 as diesel::deserialize::FromSql<diesel::sql_types::Integer, diesel::mysql::Mysql>> + <i32 as diesel::deserialize::FromSql<diesel::sql_types::Integer, diesel::sqlite::Sqlite>> + = note: required because of the requirements on the impl of `diesel::Queryable<diesel::sql_types::Text, _>` for `i32` + = note: required because of the requirements on the impl of `diesel::deserialize::FromSqlRow<diesel::sql_types::Text, _>` for `i32` + = note: required because of the requirements on the impl of `diesel::query_dsl::LoadQuery<_, i32>` for `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::SelectClause<users::columns::name>>` + +error[E0277]: the trait bound `*const str: diesel::deserialize::FromSql<diesel::sql_types::Integer, _>` is not satisfied + --> $DIR/select_carries_correct_result_type_info.rs:20:27 + | +20 | let names = select_id.load::<String>(&connection); + | ^^^^ the trait `diesel::deserialize::FromSql<diesel::sql_types::Integer, _>` is not implemented for `*const str` + | + = help: the following implementations were found: + <*const [u8] as diesel::deserialize::FromSql<diesel::sql_types::Binary, DB>> + <*const [u8] as diesel::deserialize::FromSql<diesel::sql_types::Binary, diesel::sqlite::Sqlite>> + <*const str as diesel::deserialize::FromSql<diesel::sql_types::Date, diesel::sqlite::Sqlite>> + <*const str as diesel::deserialize::FromSql<diesel::sql_types::Text, DB>> + and 3 others + = note: required because of the requirements on the impl of `diesel::deserialize::FromSql<diesel::sql_types::Integer, _>` for `std::string::String` + = note: required because of the requirements on the impl of `diesel::Queryable<diesel::sql_types::Integer, _>` for `std::string::String` + = note: required because of the requirements on the impl of `diesel::deserialize::FromSqlRow<diesel::sql_types::Integer, _>` for `std::string::String` + = note: required because of the requirements on the impl of `diesel::query_dsl::LoadQuery<_, std::string::String>` for `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::SelectClause<users::columns::id>>` diff --git a/diesel_compile_tests/tests/fail/select_for_update_cannot_be_mixed_with_some_clauses.rs b/diesel_compile_tests/tests/fail/select_for_update_cannot_be_mixed_with_some_clauses.rs new file mode 100644 index 000000000000..c0c54541c531 --- /dev/null +++ b/diesel_compile_tests/tests/fail/select_for_update_cannot_be_mixed_with_some_clauses.rs @@ -0,0 +1,24 @@ +extern crate diesel; + +use diesel::*; + +table! { + users { + id -> Integer, + } +} + +fn main() { + use self::users::dsl::*; + + users.for_update().distinct(); + users.distinct().for_update(); + users.for_update().distinct_on(id); + users.distinct_on(id).for_update(); + + users.for_update().group_by(id); + users.group_by(id).for_update(); + + users.into_boxed().for_update(); + users.for_update().into_boxed(); +} diff --git a/diesel_compile_tests/tests/fail/select_for_update_cannot_be_mixed_with_some_clauses.stderr b/diesel_compile_tests/tests/fail/select_for_update_cannot_be_mixed_with_some_clauses.stderr new file mode 100644 index 000000000000..1fa6ddc765fa --- /dev/null +++ b/diesel_compile_tests/tests/fail/select_for_update_cannot_be_mixed_with_some_clauses.stderr @@ -0,0 +1,194 @@ +error[E0271]: type mismatch resolving `<diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::NoGroupByClause, diesel::query_builder::locking_clause::LockingClause> as diesel::query_builder::AsQuery>::Query == diesel::query_builder::SelectStatement<diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::NoGroupByClause, diesel::query_builder::locking_clause::LockingClause>>` + --> $DIR/select_for_update_cannot_be_mixed_with_some_clauses.rs:14:24 + | +14 | users.for_update().distinct(); + | ^^^^^^^^ expected struct `users::table`, found struct `diesel::query_builder::SelectStatement` + | + = note: expected type `diesel::query_builder::SelectStatement<users::table, _>` + found struct `diesel::query_builder::SelectStatement<diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::NoGroupByClause, diesel::query_builder::locking_clause::LockingClause>, _>` + = note: required because of the requirements on the impl of `diesel::query_dsl::methods::DistinctDsl` for `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::NoGroupByClause, diesel::query_builder::locking_clause::LockingClause>` + +error[E0277]: the trait bound `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::NoGroupByClause, diesel::query_builder::locking_clause::LockingClause>: diesel::Table` is not satisfied + --> $DIR/select_for_update_cannot_be_mixed_with_some_clauses.rs:14:24 + | +14 | users.for_update().distinct(); + | ^^^^^^^^ the trait `diesel::Table` is not implemented for `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::NoGroupByClause, diesel::query_builder::locking_clause::LockingClause>` + | + = note: required because of the requirements on the impl of `diesel::query_dsl::methods::DistinctDsl` for `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::NoGroupByClause, diesel::query_builder::locking_clause::LockingClause>` + +error[E0277]: the trait bound `diesel::query_builder::SelectStatement<diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::NoGroupByClause, diesel::query_builder::locking_clause::LockingClause>>: diesel::query_dsl::methods::DistinctDsl` is not satisfied + --> $DIR/select_for_update_cannot_be_mixed_with_some_clauses.rs:14:24 + | +14 | users.for_update().distinct(); + | ^^^^^^^^ the trait `diesel::query_dsl::methods::DistinctDsl` is not implemented for `diesel::query_builder::SelectStatement<diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::NoGroupByClause, diesel::query_builder::locking_clause::LockingClause>>` + | + = help: the following implementations were found: + <diesel::query_builder::SelectStatement<F, S, D, W, O, LOf, G> as diesel::query_dsl::methods::DistinctDsl> + +error[E0271]: type mismatch resolving `<diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::DistinctClause> as diesel::query_builder::AsQuery>::Query == diesel::query_builder::SelectStatement<diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::DistinctClause>>` + --> $DIR/select_for_update_cannot_be_mixed_with_some_clauses.rs:15:22 + | +15 | users.distinct().for_update(); + | ^^^^^^^^^^ expected struct `users::table`, found struct `diesel::query_builder::SelectStatement` + | + = note: expected type `diesel::query_builder::SelectStatement<users::table, _>` + found struct `diesel::query_builder::SelectStatement<diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::DistinctClause>, _>` + = note: required because of the requirements on the impl of `diesel::query_dsl::methods::LockingDsl<diesel::query_builder::locking_clause::ForUpdate>` for `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::DistinctClause>` + +error[E0277]: the trait bound `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::DistinctClause>: diesel::Table` is not satisfied + --> $DIR/select_for_update_cannot_be_mixed_with_some_clauses.rs:15:22 + | +15 | users.distinct().for_update(); + | ^^^^^^^^^^ the trait `diesel::Table` is not implemented for `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::DistinctClause>` + | + = note: required because of the requirements on the impl of `diesel::query_dsl::methods::LockingDsl<diesel::query_builder::locking_clause::ForUpdate>` for `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::DistinctClause>` + +error[E0271]: type mismatch resolving `<diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::NoGroupByClause, diesel::query_builder::locking_clause::LockingClause> as diesel::query_builder::AsQuery>::Query == diesel::query_builder::SelectStatement<diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::NoGroupByClause, diesel::query_builder::locking_clause::LockingClause>>` + --> $DIR/select_for_update_cannot_be_mixed_with_some_clauses.rs:16:24 + | +16 | users.for_update().distinct_on(id); + | ^^^^^^^^^^^ expected struct `users::table`, found struct `diesel::query_builder::SelectStatement` + | + = note: expected type `diesel::query_builder::SelectStatement<users::table, _>` + found struct `diesel::query_builder::SelectStatement<diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::NoGroupByClause, diesel::query_builder::locking_clause::LockingClause>, _>` + = note: required because of the requirements on the impl of `diesel::query_dsl::methods::DistinctOnDsl<_>` for `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::NoGroupByClause, diesel::query_builder::locking_clause::LockingClause>` + +error[E0277]: the trait bound `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::NoGroupByClause, diesel::query_builder::locking_clause::LockingClause>: diesel::Table` is not satisfied + --> $DIR/select_for_update_cannot_be_mixed_with_some_clauses.rs:16:24 + | +16 | users.for_update().distinct_on(id); + | ^^^^^^^^^^^ the trait `diesel::Table` is not implemented for `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::NoGroupByClause, diesel::query_builder::locking_clause::LockingClause>` + | + = note: required because of the requirements on the impl of `diesel::query_dsl::methods::DistinctOnDsl<_>` for `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::NoGroupByClause, diesel::query_builder::locking_clause::LockingClause>` + +error[E0277]: the trait bound `diesel::query_builder::SelectStatement<diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::NoGroupByClause, diesel::query_builder::locking_clause::LockingClause>>: diesel::query_dsl::methods::DistinctOnDsl<_>` is not satisfied + --> $DIR/select_for_update_cannot_be_mixed_with_some_clauses.rs:16:24 + | +16 | users.for_update().distinct_on(id); + | ^^^^^^^^^^^ the trait `diesel::query_dsl::methods::DistinctOnDsl<_>` is not implemented for `diesel::query_builder::SelectStatement<diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::NoGroupByClause, diesel::query_builder::locking_clause::LockingClause>>` + | + = help: the following implementations were found: + <diesel::query_builder::SelectStatement<F, S, D, W, O, LOf, G> as diesel::query_dsl::methods::DistinctOnDsl<Selection>> + +error[E0277]: the trait bound `users::columns::id: diesel::SelectableExpression<diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::NoGroupByClause, diesel::query_builder::locking_clause::LockingClause>>` is not satisfied + --> $DIR/select_for_update_cannot_be_mixed_with_some_clauses.rs:16:36 + | +16 | users.for_update().distinct_on(id); + | ^^ the trait `diesel::SelectableExpression<diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::NoGroupByClause, diesel::query_builder::locking_clause::LockingClause>>` is not implemented for `users::columns::id` + | + = help: the following implementations were found: + <users::columns::id as diesel::SelectableExpression<diesel::query_builder::SelectStatement<From>>> + <users::columns::id as diesel::SelectableExpression<diesel::query_source::joins::Join<Left, Right, diesel::query_source::joins::Inner>>> + <users::columns::id as diesel::SelectableExpression<diesel::query_source::joins::Join<Left, Right, diesel::query_source::joins::LeftOuter>>> + <users::columns::id as diesel::SelectableExpression<diesel::query_source::joins::JoinOn<Join, On>>> + <users::columns::id as diesel::SelectableExpression<users::table>> + = note: required because of the requirements on the impl of `diesel::query_dsl::methods::DistinctOnDsl<users::columns::id>` for `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::NoGroupByClause, diesel::query_builder::locking_clause::LockingClause>` + +error[E0271]: type mismatch resolving `<diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::pg::DistinctOnClause<users::columns::id>> as diesel::query_builder::AsQuery>::Query == diesel::query_builder::SelectStatement<diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::pg::DistinctOnClause<users::columns::id>>>` + --> $DIR/select_for_update_cannot_be_mixed_with_some_clauses.rs:17:27 + | +17 | users.distinct_on(id).for_update(); + | ^^^^^^^^^^ expected struct `users::table`, found struct `diesel::query_builder::SelectStatement` + | + = note: expected type `diesel::query_builder::SelectStatement<users::table, _>` + found struct `diesel::query_builder::SelectStatement<diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::pg::DistinctOnClause<users::columns::id>>, _>` + = note: required because of the requirements on the impl of `diesel::query_dsl::methods::LockingDsl<diesel::query_builder::locking_clause::ForUpdate>` for `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::pg::DistinctOnClause<users::columns::id>>` + +error[E0277]: the trait bound `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::pg::DistinctOnClause<users::columns::id>>: diesel::Table` is not satisfied + --> $DIR/select_for_update_cannot_be_mixed_with_some_clauses.rs:17:27 + | +17 | users.distinct_on(id).for_update(); + | ^^^^^^^^^^ the trait `diesel::Table` is not implemented for `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::pg::DistinctOnClause<users::columns::id>>` + | + = note: required because of the requirements on the impl of `diesel::query_dsl::methods::LockingDsl<diesel::query_builder::locking_clause::ForUpdate>` for `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::pg::DistinctOnClause<users::columns::id>>` + +error[E0271]: type mismatch resolving `<diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::NoGroupByClause, diesel::query_builder::locking_clause::LockingClause> as diesel::query_builder::AsQuery>::Query == diesel::query_builder::SelectStatement<diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::NoGroupByClause, diesel::query_builder::locking_clause::LockingClause>>` + --> $DIR/select_for_update_cannot_be_mixed_with_some_clauses.rs:19:24 + | +19 | users.for_update().group_by(id); + | ^^^^^^^^ expected struct `users::table`, found struct `diesel::query_builder::SelectStatement` + | + = note: expected type `diesel::query_builder::SelectStatement<users::table, _>` + found struct `diesel::query_builder::SelectStatement<diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::NoGroupByClause, diesel::query_builder::locking_clause::LockingClause>, _>` + = note: required because of the requirements on the impl of `diesel::query_dsl::methods::GroupByDsl<_>` for `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::NoGroupByClause, diesel::query_builder::locking_clause::LockingClause>` + +error[E0277]: the trait bound `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::NoGroupByClause, diesel::query_builder::locking_clause::LockingClause>: diesel::Table` is not satisfied + --> $DIR/select_for_update_cannot_be_mixed_with_some_clauses.rs:19:24 + | +19 | users.for_update().group_by(id); + | ^^^^^^^^ the trait `diesel::Table` is not implemented for `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::NoGroupByClause, diesel::query_builder::locking_clause::LockingClause>` + | + = note: required because of the requirements on the impl of `diesel::query_dsl::methods::GroupByDsl<_>` for `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::NoGroupByClause, diesel::query_builder::locking_clause::LockingClause>` + +error[E0277]: the trait bound `diesel::query_builder::SelectStatement<diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::NoGroupByClause, diesel::query_builder::locking_clause::LockingClause>>: diesel::query_dsl::methods::GroupByDsl<_>` is not satisfied + --> $DIR/select_for_update_cannot_be_mixed_with_some_clauses.rs:19:24 + | +19 | users.for_update().group_by(id); + | ^^^^^^^^ the trait `diesel::query_dsl::methods::GroupByDsl<_>` is not implemented for `diesel::query_builder::SelectStatement<diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::NoGroupByClause, diesel::query_builder::locking_clause::LockingClause>>` + | + = help: the following implementations were found: + <diesel::query_builder::SelectStatement<F, S, D, W, O, LOf, G> as diesel::query_dsl::methods::GroupByDsl<Expr>> + +error[E0271]: type mismatch resolving `<diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::GroupByClause<users::columns::id>> as diesel::query_builder::AsQuery>::Query == diesel::query_builder::SelectStatement<diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::GroupByClause<users::columns::id>>>` + --> $DIR/select_for_update_cannot_be_mixed_with_some_clauses.rs:20:24 + | +20 | users.group_by(id).for_update(); + | ^^^^^^^^^^ expected struct `users::table`, found struct `diesel::query_builder::SelectStatement` + | + = note: expected type `diesel::query_builder::SelectStatement<users::table, _>` + found struct `diesel::query_builder::SelectStatement<diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::GroupByClause<users::columns::id>>, _>` + = note: required because of the requirements on the impl of `diesel::query_dsl::methods::LockingDsl<diesel::query_builder::locking_clause::ForUpdate>` for `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::GroupByClause<users::columns::id>>` + +error[E0277]: the trait bound `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::GroupByClause<users::columns::id>>: diesel::Table` is not satisfied + --> $DIR/select_for_update_cannot_be_mixed_with_some_clauses.rs:20:24 + | +20 | users.group_by(id).for_update(); + | ^^^^^^^^^^ the trait `diesel::Table` is not implemented for `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::GroupByClause<users::columns::id>>` + | + = note: required because of the requirements on the impl of `diesel::query_dsl::methods::LockingDsl<diesel::query_builder::locking_clause::ForUpdate>` for `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::GroupByClause<users::columns::id>>` + +error[E0271]: type mismatch resolving `<diesel::query_builder::BoxedSelectStatement<'_, (diesel::sql_types::Integer,), users::table, _> as diesel::query_builder::AsQuery>::Query == diesel::query_builder::SelectStatement<diesel::query_builder::BoxedSelectStatement<'_, (diesel::sql_types::Integer,), users::table, _>>` + --> $DIR/select_for_update_cannot_be_mixed_with_some_clauses.rs:22:24 + | +22 | users.into_boxed().for_update(); + | ^^^^^^^^^^ expected struct `diesel::query_builder::BoxedSelectStatement`, found struct `diesel::query_builder::SelectStatement` + | + = note: expected type `diesel::query_builder::BoxedSelectStatement<'_, _, _, _, _>` + found struct `diesel::query_builder::SelectStatement<diesel::query_builder::BoxedSelectStatement<'_, _, _, _, _>>` + = note: required because of the requirements on the impl of `diesel::query_dsl::methods::LockingDsl<diesel::query_builder::locking_clause::ForUpdate>` for `diesel::query_builder::BoxedSelectStatement<'_, (diesel::sql_types::Integer,), users::table, _>` + +error[E0277]: the trait bound `diesel::query_builder::BoxedSelectStatement<'_, (diesel::sql_types::Integer,), users::table, _>: diesel::Table` is not satisfied + --> $DIR/select_for_update_cannot_be_mixed_with_some_clauses.rs:22:24 + | +22 | users.into_boxed().for_update(); + | ^^^^^^^^^^ the trait `diesel::Table` is not implemented for `diesel::query_builder::BoxedSelectStatement<'_, (diesel::sql_types::Integer,), users::table, _>` + | + = note: required because of the requirements on the impl of `diesel::query_dsl::methods::LockingDsl<diesel::query_builder::locking_clause::ForUpdate>` for `diesel::query_builder::BoxedSelectStatement<'_, (diesel::sql_types::Integer,), users::table, _>` + +error[E0271]: type mismatch resolving `<diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::NoGroupByClause, diesel::query_builder::locking_clause::LockingClause> as diesel::query_builder::AsQuery>::Query == diesel::query_builder::SelectStatement<diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::NoGroupByClause, diesel::query_builder::locking_clause::LockingClause>>` + --> $DIR/select_for_update_cannot_be_mixed_with_some_clauses.rs:23:24 + | +23 | users.for_update().into_boxed(); + | ^^^^^^^^^^ expected struct `users::table`, found struct `diesel::query_builder::SelectStatement` + | + = note: expected type `diesel::query_builder::SelectStatement<users::table, _>` + found struct `diesel::query_builder::SelectStatement<diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::NoGroupByClause, diesel::query_builder::locking_clause::LockingClause>, _>` + = note: required because of the requirements on the impl of `diesel::query_dsl::boxed_dsl::BoxedDsl<'_, _>` for `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::NoGroupByClause, diesel::query_builder::locking_clause::LockingClause>` + +error[E0277]: the trait bound `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::NoGroupByClause, diesel::query_builder::locking_clause::LockingClause>: diesel::Table` is not satisfied + --> $DIR/select_for_update_cannot_be_mixed_with_some_clauses.rs:23:24 + | +23 | users.for_update().into_boxed(); + | ^^^^^^^^^^ the trait `diesel::Table` is not implemented for `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::NoGroupByClause, diesel::query_builder::locking_clause::LockingClause>` + | + = note: required because of the requirements on the impl of `diesel::query_dsl::boxed_dsl::BoxedDsl<'_, _>` for `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::NoGroupByClause, diesel::query_builder::locking_clause::LockingClause>` + +error[E0277]: the trait bound `diesel::query_builder::SelectStatement<diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::NoGroupByClause, diesel::query_builder::locking_clause::LockingClause>>: diesel::query_dsl::boxed_dsl::BoxedDsl<'_, _>` is not satisfied + --> $DIR/select_for_update_cannot_be_mixed_with_some_clauses.rs:23:24 + | +23 | users.for_update().into_boxed(); + | ^^^^^^^^^^ the trait `diesel::query_dsl::boxed_dsl::BoxedDsl<'_, _>` is not implemented for `diesel::query_builder::SelectStatement<diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::NoGroupByClause, diesel::query_builder::locking_clause::LockingClause>>` + | + = help: the following implementations were found: + <diesel::query_builder::SelectStatement<F, S, D, W, O, LOf, G> as diesel::query_dsl::boxed_dsl::BoxedDsl<'a, DB>> + = note: required because of the requirements on the impl of `diesel::query_dsl::boxed_dsl::BoxedDsl<'_, _>` for `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::NoGroupByClause, diesel::query_builder::locking_clause::LockingClause>` diff --git a/diesel_compile_tests/tests/compile-fail/select_for_update_cannot_be_used_on_sqlite.rs b/diesel_compile_tests/tests/fail/select_for_update_cannot_be_used_on_sqlite.rs similarity index 81% rename from diesel_compile_tests/tests/compile-fail/select_for_update_cannot_be_used_on_sqlite.rs rename to diesel_compile_tests/tests/fail/select_for_update_cannot_be_used_on_sqlite.rs index 3962a01892b6..131c601a9186 100644 --- a/diesel_compile_tests/tests/compile-fail/select_for_update_cannot_be_used_on_sqlite.rs +++ b/diesel_compile_tests/tests/fail/select_for_update_cannot_be_used_on_sqlite.rs @@ -1,4 +1,3 @@ -#[macro_use] extern crate diesel; use diesel::*; @@ -15,7 +14,5 @@ fn main() { users::table .for_update() .load(&conn) - //~^ ERROR: E0277 - //~| ERROR: E0277 .unwrap(); } diff --git a/diesel_compile_tests/tests/fail/select_for_update_cannot_be_used_on_sqlite.stderr b/diesel_compile_tests/tests/fail/select_for_update_cannot_be_used_on_sqlite.stderr new file mode 100644 index 000000000000..1a787ad7ca5f --- /dev/null +++ b/diesel_compile_tests/tests/fail/select_for_update_cannot_be_used_on_sqlite.stderr @@ -0,0 +1,25 @@ +error[E0277]: the trait bound `diesel::query_builder::locking_clause::ForUpdate: diesel::query_builder::QueryFragment<diesel::sqlite::Sqlite>` is not satisfied + --> $DIR/select_for_update_cannot_be_used_on_sqlite.rs:16:10 + | +16 | .load(&conn) + | ^^^^ the trait `diesel::query_builder::QueryFragment<diesel::sqlite::Sqlite>` is not implemented for `diesel::query_builder::locking_clause::ForUpdate` + | + = help: the following implementations were found: + <diesel::query_builder::locking_clause::ForUpdate as diesel::query_builder::QueryFragment<diesel::mysql::Mysql>> + <diesel::query_builder::locking_clause::ForUpdate as diesel::query_builder::QueryFragment<diesel::pg::Pg>> + = note: required because of the requirements on the impl of `diesel::query_builder::QueryFragment<diesel::sqlite::Sqlite>` for `diesel::query_builder::locking_clause::LockingClause` + = note: required because of the requirements on the impl of `diesel::query_builder::QueryFragment<diesel::sqlite::Sqlite>` for `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::NoGroupByClause, diesel::query_builder::locking_clause::LockingClause>` + = note: required because of the requirements on the impl of `diesel::query_dsl::LoadQuery<diesel::SqliteConnection, _>` for `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::NoGroupByClause, diesel::query_builder::locking_clause::LockingClause>` + +error[E0277]: the trait bound `diesel::query_builder::locking_clause::NoModifier: diesel::query_builder::QueryFragment<diesel::sqlite::Sqlite>` is not satisfied + --> $DIR/select_for_update_cannot_be_used_on_sqlite.rs:16:10 + | +16 | .load(&conn) + | ^^^^ the trait `diesel::query_builder::QueryFragment<diesel::sqlite::Sqlite>` is not implemented for `diesel::query_builder::locking_clause::NoModifier` + | + = help: the following implementations were found: + <diesel::query_builder::locking_clause::NoModifier as diesel::query_builder::QueryFragment<diesel::mysql::Mysql>> + <diesel::query_builder::locking_clause::NoModifier as diesel::query_builder::QueryFragment<diesel::pg::Pg>> + = note: required because of the requirements on the impl of `diesel::query_builder::QueryFragment<diesel::sqlite::Sqlite>` for `diesel::query_builder::locking_clause::LockingClause` + = note: required because of the requirements on the impl of `diesel::query_builder::QueryFragment<diesel::sqlite::Sqlite>` for `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::NoGroupByClause, diesel::query_builder::locking_clause::LockingClause>` + = note: required because of the requirements on the impl of `diesel::query_dsl::LoadQuery<diesel::SqliteConnection, _>` for `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::NoGroupByClause, diesel::query_builder::locking_clause::LockingClause>` diff --git a/diesel_compile_tests/tests/compile-fail/select_for_update_no_wait_cannot_be_used_on_sqlite.rs b/diesel_compile_tests/tests/fail/select_for_update_no_wait_cannot_be_used_on_sqlite.rs similarity index 82% rename from diesel_compile_tests/tests/compile-fail/select_for_update_no_wait_cannot_be_used_on_sqlite.rs rename to diesel_compile_tests/tests/fail/select_for_update_no_wait_cannot_be_used_on_sqlite.rs index 3b874df5c330..4d0e6befbdd2 100644 --- a/diesel_compile_tests/tests/compile-fail/select_for_update_no_wait_cannot_be_used_on_sqlite.rs +++ b/diesel_compile_tests/tests/fail/select_for_update_no_wait_cannot_be_used_on_sqlite.rs @@ -1,4 +1,3 @@ -#[macro_use] extern crate diesel; use diesel::*; @@ -16,7 +15,5 @@ fn main() { .for_update() .no_wait() .load(&conn) - //~^ ERROR: E0277 - //~| ERROR: E0277 .unwrap(); } diff --git a/diesel_compile_tests/tests/fail/select_for_update_no_wait_cannot_be_used_on_sqlite.stderr b/diesel_compile_tests/tests/fail/select_for_update_no_wait_cannot_be_used_on_sqlite.stderr new file mode 100644 index 000000000000..56bf172a4de0 --- /dev/null +++ b/diesel_compile_tests/tests/fail/select_for_update_no_wait_cannot_be_used_on_sqlite.stderr @@ -0,0 +1,25 @@ +error[E0277]: the trait bound `diesel::query_builder::locking_clause::ForUpdate: diesel::query_builder::QueryFragment<diesel::sqlite::Sqlite>` is not satisfied + --> $DIR/select_for_update_no_wait_cannot_be_used_on_sqlite.rs:17:10 + | +17 | .load(&conn) + | ^^^^ the trait `diesel::query_builder::QueryFragment<diesel::sqlite::Sqlite>` is not implemented for `diesel::query_builder::locking_clause::ForUpdate` + | + = help: the following implementations were found: + <diesel::query_builder::locking_clause::ForUpdate as diesel::query_builder::QueryFragment<diesel::mysql::Mysql>> + <diesel::query_builder::locking_clause::ForUpdate as diesel::query_builder::QueryFragment<diesel::pg::Pg>> + = note: required because of the requirements on the impl of `diesel::query_builder::QueryFragment<diesel::sqlite::Sqlite>` for `diesel::query_builder::locking_clause::LockingClause<diesel::query_builder::locking_clause::ForUpdate, diesel::query_builder::locking_clause::NoWait>` + = note: required because of the requirements on the impl of `diesel::query_builder::QueryFragment<diesel::sqlite::Sqlite>` for `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::NoGroupByClause, diesel::query_builder::locking_clause::LockingClause<diesel::query_builder::locking_clause::ForUpdate, diesel::query_builder::locking_clause::NoWait>>` + = note: required because of the requirements on the impl of `diesel::query_dsl::LoadQuery<diesel::SqliteConnection, _>` for `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::NoGroupByClause, diesel::query_builder::locking_clause::LockingClause<diesel::query_builder::locking_clause::ForUpdate, diesel::query_builder::locking_clause::NoWait>>` + +error[E0277]: the trait bound `diesel::query_builder::locking_clause::NoWait: diesel::query_builder::QueryFragment<diesel::sqlite::Sqlite>` is not satisfied + --> $DIR/select_for_update_no_wait_cannot_be_used_on_sqlite.rs:17:10 + | +17 | .load(&conn) + | ^^^^ the trait `diesel::query_builder::QueryFragment<diesel::sqlite::Sqlite>` is not implemented for `diesel::query_builder::locking_clause::NoWait` + | + = help: the following implementations were found: + <diesel::query_builder::locking_clause::NoWait as diesel::query_builder::QueryFragment<diesel::mysql::Mysql>> + <diesel::query_builder::locking_clause::NoWait as diesel::query_builder::QueryFragment<diesel::pg::Pg>> + = note: required because of the requirements on the impl of `diesel::query_builder::QueryFragment<diesel::sqlite::Sqlite>` for `diesel::query_builder::locking_clause::LockingClause<diesel::query_builder::locking_clause::ForUpdate, diesel::query_builder::locking_clause::NoWait>` + = note: required because of the requirements on the impl of `diesel::query_builder::QueryFragment<diesel::sqlite::Sqlite>` for `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::NoGroupByClause, diesel::query_builder::locking_clause::LockingClause<diesel::query_builder::locking_clause::ForUpdate, diesel::query_builder::locking_clause::NoWait>>` + = note: required because of the requirements on the impl of `diesel::query_dsl::LoadQuery<diesel::SqliteConnection, _>` for `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::NoGroupByClause, diesel::query_builder::locking_clause::LockingClause<diesel::query_builder::locking_clause::ForUpdate, diesel::query_builder::locking_clause::NoWait>>` diff --git a/diesel_compile_tests/tests/compile-fail/select_for_update_skip_locked_cannot_be_used_on_sqlite.rs b/diesel_compile_tests/tests/fail/select_for_update_skip_locked_cannot_be_used_on_sqlite.rs similarity index 82% rename from diesel_compile_tests/tests/compile-fail/select_for_update_skip_locked_cannot_be_used_on_sqlite.rs rename to diesel_compile_tests/tests/fail/select_for_update_skip_locked_cannot_be_used_on_sqlite.rs index bf2ab11e5bc2..a42ce4dfc70a 100644 --- a/diesel_compile_tests/tests/compile-fail/select_for_update_skip_locked_cannot_be_used_on_sqlite.rs +++ b/diesel_compile_tests/tests/fail/select_for_update_skip_locked_cannot_be_used_on_sqlite.rs @@ -1,4 +1,3 @@ -#[macro_use] extern crate diesel; use diesel::*; @@ -16,7 +15,5 @@ fn main() { .for_update() .skip_locked() .load(&conn) - //~^ ERROR: E0277 - //~| ERROR: E0277 .unwrap(); } diff --git a/diesel_compile_tests/tests/fail/select_for_update_skip_locked_cannot_be_used_on_sqlite.stderr b/diesel_compile_tests/tests/fail/select_for_update_skip_locked_cannot_be_used_on_sqlite.stderr new file mode 100644 index 000000000000..9d0375920b6b --- /dev/null +++ b/diesel_compile_tests/tests/fail/select_for_update_skip_locked_cannot_be_used_on_sqlite.stderr @@ -0,0 +1,25 @@ +error[E0277]: the trait bound `diesel::query_builder::locking_clause::ForUpdate: diesel::query_builder::QueryFragment<diesel::sqlite::Sqlite>` is not satisfied + --> $DIR/select_for_update_skip_locked_cannot_be_used_on_sqlite.rs:17:10 + | +17 | .load(&conn) + | ^^^^ the trait `diesel::query_builder::QueryFragment<diesel::sqlite::Sqlite>` is not implemented for `diesel::query_builder::locking_clause::ForUpdate` + | + = help: the following implementations were found: + <diesel::query_builder::locking_clause::ForUpdate as diesel::query_builder::QueryFragment<diesel::mysql::Mysql>> + <diesel::query_builder::locking_clause::ForUpdate as diesel::query_builder::QueryFragment<diesel::pg::Pg>> + = note: required because of the requirements on the impl of `diesel::query_builder::QueryFragment<diesel::sqlite::Sqlite>` for `diesel::query_builder::locking_clause::LockingClause<diesel::query_builder::locking_clause::ForUpdate, diesel::query_builder::locking_clause::SkipLocked>` + = note: required because of the requirements on the impl of `diesel::query_builder::QueryFragment<diesel::sqlite::Sqlite>` for `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::NoGroupByClause, diesel::query_builder::locking_clause::LockingClause<diesel::query_builder::locking_clause::ForUpdate, diesel::query_builder::locking_clause::SkipLocked>>` + = note: required because of the requirements on the impl of `diesel::query_dsl::LoadQuery<diesel::SqliteConnection, _>` for `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::NoGroupByClause, diesel::query_builder::locking_clause::LockingClause<diesel::query_builder::locking_clause::ForUpdate, diesel::query_builder::locking_clause::SkipLocked>>` + +error[E0277]: the trait bound `diesel::query_builder::locking_clause::SkipLocked: diesel::query_builder::QueryFragment<diesel::sqlite::Sqlite>` is not satisfied + --> $DIR/select_for_update_skip_locked_cannot_be_used_on_sqlite.rs:17:10 + | +17 | .load(&conn) + | ^^^^ the trait `diesel::query_builder::QueryFragment<diesel::sqlite::Sqlite>` is not implemented for `diesel::query_builder::locking_clause::SkipLocked` + | + = help: the following implementations were found: + <diesel::query_builder::locking_clause::SkipLocked as diesel::query_builder::QueryFragment<diesel::mysql::Mysql>> + <diesel::query_builder::locking_clause::SkipLocked as diesel::query_builder::QueryFragment<diesel::pg::Pg>> + = note: required because of the requirements on the impl of `diesel::query_builder::QueryFragment<diesel::sqlite::Sqlite>` for `diesel::query_builder::locking_clause::LockingClause<diesel::query_builder::locking_clause::ForUpdate, diesel::query_builder::locking_clause::SkipLocked>` + = note: required because of the requirements on the impl of `diesel::query_builder::QueryFragment<diesel::sqlite::Sqlite>` for `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::NoGroupByClause, diesel::query_builder::locking_clause::LockingClause<diesel::query_builder::locking_clause::ForUpdate, diesel::query_builder::locking_clause::SkipLocked>>` + = note: required because of the requirements on the impl of `diesel::query_dsl::LoadQuery<diesel::SqliteConnection, _>` for `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::NoGroupByClause, diesel::query_builder::locking_clause::LockingClause<diesel::query_builder::locking_clause::ForUpdate, diesel::query_builder::locking_clause::SkipLocked>>` diff --git a/diesel_compile_tests/tests/compile-fail/select_requires_column_from_same_table.rs b/diesel_compile_tests/tests/fail/select_requires_column_from_same_table.rs similarity index 84% rename from diesel_compile_tests/tests/compile-fail/select_requires_column_from_same_table.rs rename to diesel_compile_tests/tests/fail/select_requires_column_from_same_table.rs index 67c258de583c..52308a9d3800 100644 --- a/diesel_compile_tests/tests/compile-fail/select_requires_column_from_same_table.rs +++ b/diesel_compile_tests/tests/fail/select_requires_column_from_same_table.rs @@ -1,4 +1,3 @@ -#[macro_use] extern crate diesel; use diesel::*; @@ -19,5 +18,4 @@ table! { fn main() { let select_id = users::table.select(posts::id); - //~^ ERROR SelectableExpression } diff --git a/diesel_compile_tests/tests/fail/select_requires_column_from_same_table.stderr b/diesel_compile_tests/tests/fail/select_requires_column_from_same_table.stderr new file mode 100644 index 000000000000..b25160338395 --- /dev/null +++ b/diesel_compile_tests/tests/fail/select_requires_column_from_same_table.stderr @@ -0,0 +1,13 @@ +error[E0277]: the trait bound `posts::columns::id: diesel::SelectableExpression<users::table>` is not satisfied + --> $DIR/select_requires_column_from_same_table.rs:20:41 + | +20 | let select_id = users::table.select(posts::id); + | ^^^^^^^^^ the trait `diesel::SelectableExpression<users::table>` is not implemented for `posts::columns::id` + | + = help: the following implementations were found: + <posts::columns::id as diesel::SelectableExpression<diesel::query_builder::SelectStatement<From>>> + <posts::columns::id as diesel::SelectableExpression<diesel::query_source::joins::Join<Left, Right, diesel::query_source::joins::Inner>>> + <posts::columns::id as diesel::SelectableExpression<diesel::query_source::joins::Join<Left, Right, diesel::query_source::joins::LeftOuter>>> + <posts::columns::id as diesel::SelectableExpression<diesel::query_source::joins::JoinOn<Join, On>>> + <posts::columns::id as diesel::SelectableExpression<posts::table>> + = note: required because of the requirements on the impl of `diesel::query_dsl::select_dsl::SelectDsl<posts::columns::id>` for `diesel::query_builder::SelectStatement<users::table>` diff --git a/diesel_compile_tests/tests/compile-fail/select_requires_valid_grouping.rs b/diesel_compile_tests/tests/fail/select_requires_valid_grouping.rs similarity index 93% rename from diesel_compile_tests/tests/compile-fail/select_requires_valid_grouping.rs rename to diesel_compile_tests/tests/fail/select_requires_valid_grouping.rs index ac08a8adce69..6b0beb4b550b 100644 --- a/diesel_compile_tests/tests/compile-fail/select_requires_valid_grouping.rs +++ b/diesel_compile_tests/tests/fail/select_requires_valid_grouping.rs @@ -1,5 +1,5 @@ -#[macro_use] extern crate diesel; + use diesel::prelude::*; table! { @@ -83,28 +83,21 @@ fn main() { // cases that should fail to compile let source = users::table.group_by(users::name).select(users::id); - //~^ ERROR IsContainedInGroupBy let source = users::table .group_by((users::name, users::hair_color)) .select(users::id); - //~^ ERROR IsContainedInGroupBy let source = users::table .group_by(users::name) .select((users::name, users::id)); - //~^ ERROR IsContainedInGroupBy let source = users::table .group_by((users::name, users::hair_color)) .select(users::id); - //~^ ERROR IsContainedInGroupBy let source = users::table .inner_join(posts::table) .group_by((users::id, posts::title)) .select((users::all_columns, posts::id)); - //~^ ERROR IsContainedInGroupBy let source = users::table .inner_join(posts::table.inner_join(comments::table)) .group_by((users::id, posts::id)) .select((users::all_columns, posts::all_columns, comments::id)); - //~^ ERROR IsContainedInGroupBy - //~| E0277 } diff --git a/diesel_compile_tests/tests/fail/select_requires_valid_grouping.stderr b/diesel_compile_tests/tests/fail/select_requires_valid_grouping.stderr new file mode 100644 index 000000000000..5c4dd3458ead --- /dev/null +++ b/diesel_compile_tests/tests/fail/select_requires_valid_grouping.stderr @@ -0,0 +1,80 @@ +error[E0271]: type mismatch resolving `<users::columns::name as diesel::expression::IsContainedInGroupBy<users::columns::id>>::Output == diesel::expression::is_contained_in_group_by::Yes` + --> $DIR/select_requires_valid_grouping.rs:85:53 + | +85 | let source = users::table.group_by(users::name).select(users::id); + | ^^^^^^ expected struct `diesel::expression::is_contained_in_group_by::No`, found struct `diesel::expression::is_contained_in_group_by::Yes` + | + = note: required because of the requirements on the impl of `diesel::expression::ValidGrouping<users::columns::name>` for `users::columns::id` + = note: required because of the requirements on the impl of `diesel::query_dsl::select_dsl::SelectDsl<users::columns::id>` for `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::GroupByClause<users::columns::name>>` + +error[E0271]: type mismatch resolving `<(users::columns::name, users::columns::hair_color) as diesel::expression::IsContainedInGroupBy<users::columns::id>>::Output == diesel::expression::is_contained_in_group_by::Yes` + --> $DIR/select_requires_valid_grouping.rs:88:10 + | +88 | .select(users::id); + | ^^^^^^ expected struct `diesel::expression::is_contained_in_group_by::No`, found struct `diesel::expression::is_contained_in_group_by::Yes` + | + = note: required because of the requirements on the impl of `diesel::expression::ValidGrouping<(users::columns::name, users::columns::hair_color)>` for `users::columns::id` + = note: required because of the requirements on the impl of `diesel::query_dsl::select_dsl::SelectDsl<users::columns::id>` for `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::GroupByClause<(users::columns::name, users::columns::hair_color)>>` + +error[E0271]: type mismatch resolving `<users::columns::name as diesel::expression::IsContainedInGroupBy<users::columns::id>>::Output == diesel::expression::is_contained_in_group_by::Yes` + --> $DIR/select_requires_valid_grouping.rs:91:10 + | +91 | .select((users::name, users::id)); + | ^^^^^^ expected struct `diesel::expression::is_contained_in_group_by::No`, found struct `diesel::expression::is_contained_in_group_by::Yes` + | + = note: required because of the requirements on the impl of `diesel::expression::ValidGrouping<users::columns::name>` for `users::columns::id` + = note: required because of the requirements on the impl of `diesel::expression::ValidGrouping<users::columns::name>` for `(users::columns::name, users::columns::id)` + = note: required because of the requirements on the impl of `diesel::query_dsl::select_dsl::SelectDsl<(users::columns::name, users::columns::id)>` for `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::GroupByClause<users::columns::name>>` + +error[E0271]: type mismatch resolving `<(users::columns::name, users::columns::hair_color) as diesel::expression::IsContainedInGroupBy<users::columns::id>>::Output == diesel::expression::is_contained_in_group_by::Yes` + --> $DIR/select_requires_valid_grouping.rs:94:10 + | +94 | .select(users::id); + | ^^^^^^ expected struct `diesel::expression::is_contained_in_group_by::No`, found struct `diesel::expression::is_contained_in_group_by::Yes` + | + = note: required because of the requirements on the impl of `diesel::expression::ValidGrouping<(users::columns::name, users::columns::hair_color)>` for `users::columns::id` + = note: required because of the requirements on the impl of `diesel::query_dsl::select_dsl::SelectDsl<users::columns::id>` for `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::GroupByClause<(users::columns::name, users::columns::hair_color)>>` + +error[E0271]: type mismatch resolving `<(users::columns::id, posts::columns::title) as diesel::expression::IsContainedInGroupBy<posts::columns::id>>::Output == diesel::expression::is_contained_in_group_by::Yes` + --> $DIR/select_requires_valid_grouping.rs:98:10 + | +98 | .select((users::all_columns, posts::id)); + | ^^^^^^ expected struct `diesel::expression::is_contained_in_group_by::No`, found struct `diesel::expression::is_contained_in_group_by::Yes` + | + = note: required because of the requirements on the impl of `diesel::expression::ValidGrouping<(users::columns::id, posts::columns::title)>` for `posts::columns::id` + = note: required because of the requirements on the impl of `diesel::expression::ValidGrouping<(users::columns::id, posts::columns::title)>` for `((users::columns::id, users::columns::name, users::columns::hair_color), posts::columns::id)` + = note: required because of the requirements on the impl of `diesel::query_dsl::select_dsl::SelectDsl<((users::columns::id, users::columns::name, users::columns::hair_color), posts::columns::id)>` for `diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, posts::table, diesel::query_source::joins::Inner>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::GroupByClause<(users::columns::id, posts::columns::title)>>` + +error[E0277]: the trait bound `users::columns::id: diesel::expression::IsContainedInGroupBy<comments::columns::id>` is not satisfied + --> $DIR/select_requires_valid_grouping.rs:102:17 + | +102 | .select((users::all_columns, posts::all_columns, comments::id)); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `diesel::expression::IsContainedInGroupBy<comments::columns::id>` is not implemented for `users::columns::id` + | + = help: the following implementations were found: + <users::columns::id as diesel::expression::IsContainedInGroupBy<posts::columns::id>> + <users::columns::id as diesel::expression::IsContainedInGroupBy<posts::columns::title>> + <users::columns::id as diesel::expression::IsContainedInGroupBy<posts::columns::user_id>> + <users::columns::id as diesel::expression::IsContainedInGroupBy<users::columns::hair_color>> + and 2 others + = note: required because of the requirements on the impl of `diesel::expression::IsContainedInGroupBy<comments::columns::id>` for `(users::columns::id, posts::columns::id)` + = note: required because of the requirements on the impl of `diesel::expression::ValidGrouping<(users::columns::id, posts::columns::id)>` for `comments::columns::id` + = note: required because of the requirements on the impl of `diesel::expression::ValidGrouping<(users::columns::id, posts::columns::id)>` for `((users::columns::id, users::columns::name, users::columns::hair_color), (posts::columns::id, posts::columns::title, posts::columns::user_id), comments::columns::id)` + = note: required because of the requirements on the impl of `diesel::query_dsl::select_dsl::SelectDsl<((users::columns::id, users::columns::name, users::columns::hair_color), (posts::columns::id, posts::columns::title, posts::columns::user_id), comments::columns::id)>` for `diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<posts::table, comments::table, diesel::query_source::joins::Inner>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<comments::columns::post_id>, diesel::expression::nullable::Nullable<posts::columns::id>>>>>, diesel::query_source::joins::Inner>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::GroupByClause<(users::columns::id, posts::columns::id)>>` + +error[E0277]: the trait bound `posts::columns::id: diesel::expression::IsContainedInGroupBy<comments::columns::id>` is not satisfied + --> $DIR/select_requires_valid_grouping.rs:102:17 + | +102 | .select((users::all_columns, posts::all_columns, comments::id)); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `diesel::expression::IsContainedInGroupBy<comments::columns::id>` is not implemented for `posts::columns::id` + | + = help: the following implementations were found: + <posts::columns::id as diesel::expression::IsContainedInGroupBy<posts::columns::id>> + <posts::columns::id as diesel::expression::IsContainedInGroupBy<posts::columns::title>> + <posts::columns::id as diesel::expression::IsContainedInGroupBy<posts::columns::user_id>> + <posts::columns::id as diesel::expression::IsContainedInGroupBy<users::columns::hair_color>> + and 2 others + = note: required because of the requirements on the impl of `diesel::expression::IsContainedInGroupBy<comments::columns::id>` for `(users::columns::id, posts::columns::id)` + = note: required because of the requirements on the impl of `diesel::expression::ValidGrouping<(users::columns::id, posts::columns::id)>` for `comments::columns::id` + = note: required because of the requirements on the impl of `diesel::expression::ValidGrouping<(users::columns::id, posts::columns::id)>` for `((users::columns::id, users::columns::name, users::columns::hair_color), (posts::columns::id, posts::columns::title, posts::columns::user_id), comments::columns::id)` + = note: required because of the requirements on the impl of `diesel::query_dsl::select_dsl::SelectDsl<((users::columns::id, users::columns::name, users::columns::hair_color), (posts::columns::id, posts::columns::title, posts::columns::user_id), comments::columns::id)>` for `diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<users::table, diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<posts::table, comments::table, diesel::query_source::joins::Inner>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<comments::columns::post_id>, diesel::expression::nullable::Nullable<posts::columns::id>>>>>, diesel::query_source::joins::Inner>, diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<posts::columns::user_id>, diesel::expression::nullable::Nullable<users::columns::id>>>>, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::GroupByClause<(users::columns::id, posts::columns::id)>>` diff --git a/diesel_compile_tests/tests/compile-fail/select_sql_still_ensures_result_type.rs b/diesel_compile_tests/tests/fail/select_sql_still_ensures_result_type.rs similarity index 91% rename from diesel_compile_tests/tests/compile-fail/select_sql_still_ensures_result_type.rs rename to diesel_compile_tests/tests/fail/select_sql_still_ensures_result_type.rs index a61ae5a43acc..d1b343ed3aef 100644 --- a/diesel_compile_tests/tests/compile-fail/select_sql_still_ensures_result_type.rs +++ b/diesel_compile_tests/tests/fail/select_sql_still_ensures_result_type.rs @@ -1,4 +1,3 @@ -#[macro_use] extern crate diesel; use diesel::*; @@ -15,5 +14,4 @@ fn main() { let connection = PgConnection::establish("").unwrap(); let select_count = users::table.select(sql::<sql_types::BigInt>("COUNT(*)")); let count = select_count.get_result::<String>(&connection).unwrap(); - //~^ ERROR E0277 } diff --git a/diesel_compile_tests/tests/fail/select_sql_still_ensures_result_type.stderr b/diesel_compile_tests/tests/fail/select_sql_still_ensures_result_type.stderr new file mode 100644 index 000000000000..c604fc4f45b6 --- /dev/null +++ b/diesel_compile_tests/tests/fail/select_sql_still_ensures_result_type.stderr @@ -0,0 +1,16 @@ +error[E0277]: the trait bound `*const str: diesel::deserialize::FromSql<diesel::sql_types::BigInt, _>` is not satisfied + --> $DIR/select_sql_still_ensures_result_type.rs:16:30 + | +16 | let count = select_count.get_result::<String>(&connection).unwrap(); + | ^^^^^^^^^^ the trait `diesel::deserialize::FromSql<diesel::sql_types::BigInt, _>` is not implemented for `*const str` + | + = help: the following implementations were found: + <*const [u8] as diesel::deserialize::FromSql<diesel::sql_types::Binary, DB>> + <*const [u8] as diesel::deserialize::FromSql<diesel::sql_types::Binary, diesel::sqlite::Sqlite>> + <*const str as diesel::deserialize::FromSql<diesel::sql_types::Date, diesel::sqlite::Sqlite>> + <*const str as diesel::deserialize::FromSql<diesel::sql_types::Text, DB>> + and 3 others + = note: required because of the requirements on the impl of `diesel::deserialize::FromSql<diesel::sql_types::BigInt, _>` for `std::string::String` + = note: required because of the requirements on the impl of `diesel::Queryable<diesel::sql_types::BigInt, _>` for `std::string::String` + = note: required because of the requirements on the impl of `diesel::deserialize::FromSqlRow<diesel::sql_types::BigInt, _>` for `std::string::String` + = note: required because of the requirements on the impl of `diesel::query_dsl::LoadQuery<_, std::string::String>` for `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::SelectClause<diesel::expression::SqlLiteral<diesel::sql_types::BigInt>>>` diff --git a/diesel_compile_tests/tests/compile-fail/selecting_multiple_columns_requires_all_must_be_from_selectable_table.rs b/diesel_compile_tests/tests/fail/selecting_multiple_columns_requires_all_must_be_from_selectable_table.rs similarity index 74% rename from diesel_compile_tests/tests/compile-fail/selecting_multiple_columns_requires_all_must_be_from_selectable_table.rs rename to diesel_compile_tests/tests/fail/selecting_multiple_columns_requires_all_must_be_from_selectable_table.rs index 8cf32e95d6d4..1af412df4659 100644 --- a/diesel_compile_tests/tests/compile-fail/selecting_multiple_columns_requires_all_must_be_from_selectable_table.rs +++ b/diesel_compile_tests/tests/fail/selecting_multiple_columns_requires_all_must_be_from_selectable_table.rs @@ -1,4 +1,3 @@ -#[macro_use] extern crate diesel; use diesel::*; @@ -20,10 +19,5 @@ table! { fn main() { let stuff = users::table.select((posts::id, posts::user_id)); - //~^ ERROR Selectable - //~| ERROR E0277 - //~| ERROR E0277 let stuff = users::table.select((posts::id, users::name)); - //~^ ERROR Selectable - //~| ERROR E0277 } diff --git a/diesel_compile_tests/tests/fail/selecting_multiple_columns_requires_all_must_be_from_selectable_table.stderr b/diesel_compile_tests/tests/fail/selecting_multiple_columns_requires_all_must_be_from_selectable_table.stderr new file mode 100644 index 000000000000..5026d777b6e5 --- /dev/null +++ b/diesel_compile_tests/tests/fail/selecting_multiple_columns_requires_all_must_be_from_selectable_table.stderr @@ -0,0 +1,70 @@ +error[E0277]: the trait bound `posts::columns::id: diesel::SelectableExpression<users::table>` is not satisfied + --> $DIR/selecting_multiple_columns_requires_all_must_be_from_selectable_table.rs:21:37 + | +21 | let stuff = users::table.select((posts::id, posts::user_id)); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `diesel::SelectableExpression<users::table>` is not implemented for `posts::columns::id` + | + = help: the following implementations were found: + <posts::columns::id as diesel::SelectableExpression<diesel::query_builder::SelectStatement<From>>> + <posts::columns::id as diesel::SelectableExpression<diesel::query_source::joins::Join<Left, Right, diesel::query_source::joins::Inner>>> + <posts::columns::id as diesel::SelectableExpression<diesel::query_source::joins::Join<Left, Right, diesel::query_source::joins::LeftOuter>>> + <posts::columns::id as diesel::SelectableExpression<diesel::query_source::joins::JoinOn<Join, On>>> + <posts::columns::id as diesel::SelectableExpression<posts::table>> + = note: required because of the requirements on the impl of `diesel::SelectableExpression<users::table>` for `(posts::columns::id, posts::columns::user_id)` + = note: required because of the requirements on the impl of `diesel::query_dsl::select_dsl::SelectDsl<(posts::columns::id, posts::columns::user_id)>` for `diesel::query_builder::SelectStatement<users::table>` + +error[E0277]: the trait bound `posts::columns::user_id: diesel::SelectableExpression<users::table>` is not satisfied + --> $DIR/selecting_multiple_columns_requires_all_must_be_from_selectable_table.rs:21:37 + | +21 | let stuff = users::table.select((posts::id, posts::user_id)); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `diesel::SelectableExpression<users::table>` is not implemented for `posts::columns::user_id` + | + = help: the following implementations were found: + <posts::columns::user_id as diesel::SelectableExpression<diesel::query_builder::SelectStatement<From>>> + <posts::columns::user_id as diesel::SelectableExpression<diesel::query_source::joins::Join<Left, Right, diesel::query_source::joins::Inner>>> + <posts::columns::user_id as diesel::SelectableExpression<diesel::query_source::joins::Join<Left, Right, diesel::query_source::joins::LeftOuter>>> + <posts::columns::user_id as diesel::SelectableExpression<diesel::query_source::joins::JoinOn<Join, On>>> + <posts::columns::user_id as diesel::SelectableExpression<posts::table>> + = note: required because of the requirements on the impl of `diesel::SelectableExpression<users::table>` for `(posts::columns::id, posts::columns::user_id)` + = note: required because of the requirements on the impl of `diesel::query_dsl::select_dsl::SelectDsl<(posts::columns::id, posts::columns::user_id)>` for `diesel::query_builder::SelectStatement<users::table>` + +error[E0277]: the trait bound `users::table: diesel::query_source::AppearsInFromClause<posts::table>` is not satisfied + --> $DIR/selecting_multiple_columns_requires_all_must_be_from_selectable_table.rs:21:30 + | +21 | let stuff = users::table.select((posts::id, posts::user_id)); + | ^^^^^^ the trait `diesel::query_source::AppearsInFromClause<posts::table>` is not implemented for `users::table` + | + = help: the following implementations were found: + <users::table as diesel::query_source::AppearsInFromClause<users::table>> + = note: required because of the requirements on the impl of `diesel::AppearsOnTable<users::table>` for `posts::columns::id` + = note: required because of the requirements on the impl of `diesel::AppearsOnTable<users::table>` for `(posts::columns::id, posts::columns::user_id)` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<users::table>` for `(posts::columns::id, posts::columns::user_id)` + = note: required because of the requirements on the impl of `diesel::query_dsl::select_dsl::SelectDsl<(posts::columns::id, posts::columns::user_id)>` for `diesel::query_builder::SelectStatement<users::table>` + +error[E0277]: the trait bound `posts::columns::id: diesel::SelectableExpression<users::table>` is not satisfied + --> $DIR/selecting_multiple_columns_requires_all_must_be_from_selectable_table.rs:22:37 + | +22 | let stuff = users::table.select((posts::id, users::name)); + | ^^^^^^^^^^^^^^^^^^^^^^^^ the trait `diesel::SelectableExpression<users::table>` is not implemented for `posts::columns::id` + | + = help: the following implementations were found: + <posts::columns::id as diesel::SelectableExpression<diesel::query_builder::SelectStatement<From>>> + <posts::columns::id as diesel::SelectableExpression<diesel::query_source::joins::Join<Left, Right, diesel::query_source::joins::Inner>>> + <posts::columns::id as diesel::SelectableExpression<diesel::query_source::joins::Join<Left, Right, diesel::query_source::joins::LeftOuter>>> + <posts::columns::id as diesel::SelectableExpression<diesel::query_source::joins::JoinOn<Join, On>>> + <posts::columns::id as diesel::SelectableExpression<posts::table>> + = note: required because of the requirements on the impl of `diesel::SelectableExpression<users::table>` for `(posts::columns::id, users::columns::name)` + = note: required because of the requirements on the impl of `diesel::query_dsl::select_dsl::SelectDsl<(posts::columns::id, users::columns::name)>` for `diesel::query_builder::SelectStatement<users::table>` + +error[E0277]: the trait bound `users::table: diesel::query_source::AppearsInFromClause<posts::table>` is not satisfied + --> $DIR/selecting_multiple_columns_requires_all_must_be_from_selectable_table.rs:22:30 + | +22 | let stuff = users::table.select((posts::id, users::name)); + | ^^^^^^ the trait `diesel::query_source::AppearsInFromClause<posts::table>` is not implemented for `users::table` + | + = help: the following implementations were found: + <users::table as diesel::query_source::AppearsInFromClause<users::table>> + = note: required because of the requirements on the impl of `diesel::AppearsOnTable<users::table>` for `posts::columns::id` + = note: required because of the requirements on the impl of `diesel::AppearsOnTable<users::table>` for `(posts::columns::id, users::columns::name)` + = note: required because of the requirements on the impl of `diesel::SelectableExpression<users::table>` for `(posts::columns::id, users::columns::name)` + = note: required because of the requirements on the impl of `diesel::query_dsl::select_dsl::SelectDsl<(posts::columns::id, users::columns::name)>` for `diesel::query_builder::SelectStatement<users::table>` diff --git a/diesel_compile_tests/tests/ui/sql_type_bad_options.rs b/diesel_compile_tests/tests/fail/sql_type_bad_options.rs similarity index 100% rename from diesel_compile_tests/tests/ui/sql_type_bad_options.rs rename to diesel_compile_tests/tests/fail/sql_type_bad_options.rs diff --git a/diesel_compile_tests/tests/ui/sql_type_bad_options.stderr b/diesel_compile_tests/tests/fail/sql_type_bad_options.stderr similarity index 95% rename from diesel_compile_tests/tests/ui/sql_type_bad_options.stderr rename to diesel_compile_tests/tests/fail/sql_type_bad_options.stderr index b03e52dad51f..dc8b52195422 100644 --- a/diesel_compile_tests/tests/ui/sql_type_bad_options.stderr +++ b/diesel_compile_tests/tests/fail/sql_type_bad_options.stderr @@ -45,6 +45,3 @@ error: `postgres` must be in the form `postgres(...)` | 26 | #[postgres = "foo"] | ^^^^^^^^^^^^^^^^ - -error: aborting due to 5 previous errors; 3 warnings emitted - diff --git a/diesel_compile_tests/tests/compile-fail/sqlite_insert_or_ignore_cannot_be_used_on_pg.rs b/diesel_compile_tests/tests/fail/sqlite_insert_or_ignore_cannot_be_used_on_pg.rs similarity index 85% rename from diesel_compile_tests/tests/compile-fail/sqlite_insert_or_ignore_cannot_be_used_on_pg.rs rename to diesel_compile_tests/tests/fail/sqlite_insert_or_ignore_cannot_be_used_on_pg.rs index 9751707f70db..ff9aea3ed4a8 100644 --- a/diesel_compile_tests/tests/compile-fail/sqlite_insert_or_ignore_cannot_be_used_on_pg.rs +++ b/diesel_compile_tests/tests/fail/sqlite_insert_or_ignore_cannot_be_used_on_pg.rs @@ -1,4 +1,4 @@ -#[macro_use] extern crate diesel; +extern crate diesel; use diesel::*; @@ -19,6 +19,5 @@ fn main() { insert_or_ignore_into(users::table) .values(users::id.eq(1)) .execute(&connection) - //~^ ERROR E0277 .unwrap(); } diff --git a/diesel_compile_tests/tests/fail/sqlite_insert_or_ignore_cannot_be_used_on_pg.stderr b/diesel_compile_tests/tests/fail/sqlite_insert_or_ignore_cannot_be_used_on_pg.stderr new file mode 100644 index 000000000000..4b0dba2d81a0 --- /dev/null +++ b/diesel_compile_tests/tests/fail/sqlite_insert_or_ignore_cannot_be_used_on_pg.stderr @@ -0,0 +1,11 @@ +error[E0277]: the trait bound `diesel::query_builder::insert_statement::InsertOrIgnore: diesel::query_builder::QueryFragment<diesel::pg::Pg>` is not satisfied + --> $DIR/sqlite_insert_or_ignore_cannot_be_used_on_pg.rs:21:10 + | +21 | .execute(&connection) + | ^^^^^^^ the trait `diesel::query_builder::QueryFragment<diesel::pg::Pg>` is not implemented for `diesel::query_builder::insert_statement::InsertOrIgnore` + | + = help: the following implementations were found: + <diesel::query_builder::insert_statement::InsertOrIgnore as diesel::query_builder::QueryFragment<diesel::mysql::Mysql>> + <diesel::query_builder::insert_statement::InsertOrIgnore as diesel::query_builder::QueryFragment<diesel::sqlite::Sqlite>> + = note: required because of the requirements on the impl of `diesel::query_builder::QueryFragment<diesel::pg::Pg>` for `diesel::query_builder::InsertStatement<users::table, diesel::query_builder::ValuesClause<diesel::insertable::ColumnInsertValue<users::columns::id, diesel::expression::bound::Bound<diesel::sql_types::Integer, i32>>, users::table>, diesel::query_builder::insert_statement::InsertOrIgnore>` + = note: required because of the requirements on the impl of `diesel::query_dsl::load_dsl::ExecuteDsl<diesel::PgConnection, diesel::pg::Pg>` for `diesel::query_builder::InsertStatement<users::table, diesel::query_builder::ValuesClause<diesel::insertable::ColumnInsertValue<users::columns::id, diesel::expression::bound::Bound<diesel::sql_types::Integer, i32>>, users::table>, diesel::query_builder::insert_statement::InsertOrIgnore>` diff --git a/diesel_compile_tests/tests/compile-fail/sqlite_upsert_cannot_be_used_on_pg.rs b/diesel_compile_tests/tests/fail/sqlite_upsert_cannot_be_used_on_pg.rs similarity index 84% rename from diesel_compile_tests/tests/compile-fail/sqlite_upsert_cannot_be_used_on_pg.rs rename to diesel_compile_tests/tests/fail/sqlite_upsert_cannot_be_used_on_pg.rs index 6b9ec3f803ef..d8668ce4a8c5 100644 --- a/diesel_compile_tests/tests/compile-fail/sqlite_upsert_cannot_be_used_on_pg.rs +++ b/diesel_compile_tests/tests/fail/sqlite_upsert_cannot_be_used_on_pg.rs @@ -1,4 +1,4 @@ -#[macro_use] extern crate diesel; +extern crate diesel; use diesel::*; @@ -19,5 +19,4 @@ fn main() { replace_into(users::table) .values(&User { id: 1 }) .execute(&connection); - //~^ ERROR E0277 } diff --git a/diesel_compile_tests/tests/fail/sqlite_upsert_cannot_be_used_on_pg.stderr b/diesel_compile_tests/tests/fail/sqlite_upsert_cannot_be_used_on_pg.stderr new file mode 100644 index 000000000000..b917ef1a2545 --- /dev/null +++ b/diesel_compile_tests/tests/fail/sqlite_upsert_cannot_be_used_on_pg.stderr @@ -0,0 +1,11 @@ +error[E0277]: the trait bound `diesel::query_builder::insert_statement::Replace: diesel::query_builder::QueryFragment<diesel::pg::Pg>` is not satisfied + --> $DIR/sqlite_upsert_cannot_be_used_on_pg.rs:21:10 + | +21 | .execute(&connection); + | ^^^^^^^ the trait `diesel::query_builder::QueryFragment<diesel::pg::Pg>` is not implemented for `diesel::query_builder::insert_statement::Replace` + | + = help: the following implementations were found: + <diesel::query_builder::insert_statement::Replace as diesel::query_builder::QueryFragment<diesel::mysql::Mysql>> + <diesel::query_builder::insert_statement::Replace as diesel::query_builder::QueryFragment<diesel::sqlite::Sqlite>> + = note: required because of the requirements on the impl of `diesel::query_builder::QueryFragment<diesel::pg::Pg>` for `diesel::query_builder::InsertStatement<users::table, diesel::query_builder::ValuesClause<(diesel::insertable::ColumnInsertValue<users::columns::id, diesel::expression::bound::Bound<diesel::sql_types::Integer, &i32>>,), users::table>, diesel::query_builder::insert_statement::Replace>` + = note: required because of the requirements on the impl of `diesel::query_dsl::load_dsl::ExecuteDsl<diesel::PgConnection, diesel::pg::Pg>` for `diesel::query_builder::InsertStatement<users::table, diesel::query_builder::ValuesClause<(diesel::insertable::ColumnInsertValue<users::columns::id, diesel::expression::bound::Bound<diesel::sql_types::Integer, &i32>>,), users::table>, diesel::query_builder::insert_statement::Replace>` diff --git a/diesel_compile_tests/tests/compile-fail/subselect_cannot_reference_random_tables.rs b/diesel_compile_tests/tests/fail/subselect_cannot_reference_random_tables.rs similarity index 86% rename from diesel_compile_tests/tests/compile-fail/subselect_cannot_reference_random_tables.rs rename to diesel_compile_tests/tests/fail/subselect_cannot_reference_random_tables.rs index 3972ac7e27d4..6d1a3f4f7ad2 100644 --- a/diesel_compile_tests/tests/compile-fail/subselect_cannot_reference_random_tables.rs +++ b/diesel_compile_tests/tests/fail/subselect_cannot_reference_random_tables.rs @@ -1,4 +1,3 @@ -#[macro_use] extern crate diesel; use diesel::*; @@ -31,17 +30,14 @@ fn main() { let _ = users::table .filter(users::id.eq_any(posts::table.select(posts::id).filter(comments::id.eq(1)))) .load::<(i32,)>(&conn); - //~^ ERROR AppearsInFromClause let _ = users::table .filter(users::id.eq(any( posts::table.select(posts::id).filter(comments::id.eq(1)), ))) .load::<(i32,)>(&conn); - //~^ ERROR AppearsInFromClause let _ = users::table .filter(exists(posts::table.filter(comments::id.eq(1)))) .load::<(i32,)>(&conn); - //~^ ERROR AppearsInFromClause } diff --git a/diesel_compile_tests/tests/fail/subselect_cannot_reference_random_tables.stderr b/diesel_compile_tests/tests/fail/subselect_cannot_reference_random_tables.stderr new file mode 100644 index 000000000000..c4e2d607ef14 --- /dev/null +++ b/diesel_compile_tests/tests/fail/subselect_cannot_reference_random_tables.stderr @@ -0,0 +1,53 @@ +error[E0271]: type mismatch resolving `<diesel::query_source::joins::Join<posts::table, users::table, diesel::query_source::joins::Inner> as diesel::query_source::AppearsInFromClause<comments::table>>::Count == diesel::query_source::Once` + --> $DIR/subselect_cannot_reference_random_tables.rs:32:10 + | +32 | .load::<(i32,)>(&conn); + | ^^^^ expected struct `diesel::query_source::Never`, found struct `diesel::query_source::Once` + | + = note: required because of the requirements on the impl of `diesel::AppearsOnTable<diesel::query_source::joins::Join<posts::table, users::table, diesel::query_source::joins::Inner>>` for `comments::columns::id` + = note: required because of the requirements on the impl of `diesel::AppearsOnTable<diesel::query_source::joins::Join<posts::table, users::table, diesel::query_source::joins::Inner>>` for `diesel::expression::operators::Eq<comments::columns::id, diesel::expression::bound::Bound<diesel::sql_types::Integer, i32>>` + = note: required because of the requirements on the impl of `diesel::AppearsOnTable<diesel::query_source::joins::Join<posts::table, users::table, diesel::query_source::joins::Inner>>` for `diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<comments::columns::id, diesel::expression::bound::Bound<diesel::sql_types::Integer, i32>>>` + = note: required because of the requirements on the impl of `diesel::query_builder::where_clause::ValidWhereClause<diesel::query_source::joins::Join<posts::table, users::table, diesel::query_source::joins::Inner>>` for `diesel::query_builder::where_clause::WhereClause<diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<comments::columns::id, diesel::expression::bound::Bound<diesel::sql_types::Integer, i32>>>>` + = note: required because of the requirements on the impl of `diesel::expression::subselect::ValidSubselect<users::table>` for `diesel::query_builder::SelectStatement<posts::table, diesel::query_builder::select_clause::SelectClause<posts::columns::id>, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::WhereClause<diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<comments::columns::id, diesel::expression::bound::Bound<diesel::sql_types::Integer, i32>>>>>` + = note: required because of the requirements on the impl of `diesel::AppearsOnTable<users::table>` for `diesel::expression::subselect::Subselect<diesel::query_builder::SelectStatement<posts::table, diesel::query_builder::select_clause::SelectClause<posts::columns::id>, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::WhereClause<diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<comments::columns::id, diesel::expression::bound::Bound<diesel::sql_types::Integer, i32>>>>>, diesel::sql_types::Integer>` + = note: required because of the requirements on the impl of `diesel::AppearsOnTable<users::table>` for `diesel::expression::array_comparison::In<users::columns::id, diesel::expression::subselect::Subselect<diesel::query_builder::SelectStatement<posts::table, diesel::query_builder::select_clause::SelectClause<posts::columns::id>, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::WhereClause<diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<comments::columns::id, diesel::expression::bound::Bound<diesel::sql_types::Integer, i32>>>>>, diesel::sql_types::Integer>>` + = note: required because of the requirements on the impl of `diesel::AppearsOnTable<users::table>` for `diesel::expression::grouped::Grouped<diesel::expression::array_comparison::In<users::columns::id, diesel::expression::subselect::Subselect<diesel::query_builder::SelectStatement<posts::table, diesel::query_builder::select_clause::SelectClause<posts::columns::id>, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::WhereClause<diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<comments::columns::id, diesel::expression::bound::Bound<diesel::sql_types::Integer, i32>>>>>, diesel::sql_types::Integer>>>` + = note: required because of the requirements on the impl of `diesel::query_builder::where_clause::ValidWhereClause<users::table>` for `diesel::query_builder::where_clause::WhereClause<diesel::expression::grouped::Grouped<diesel::expression::array_comparison::In<users::columns::id, diesel::expression::subselect::Subselect<diesel::query_builder::SelectStatement<posts::table, diesel::query_builder::select_clause::SelectClause<posts::columns::id>, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::WhereClause<diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<comments::columns::id, diesel::expression::bound::Bound<diesel::sql_types::Integer, i32>>>>>, diesel::sql_types::Integer>>>>` + = note: required because of the requirements on the impl of `diesel::query_builder::Query` for `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::WhereClause<diesel::expression::grouped::Grouped<diesel::expression::array_comparison::In<users::columns::id, diesel::expression::subselect::Subselect<diesel::query_builder::SelectStatement<posts::table, diesel::query_builder::select_clause::SelectClause<posts::columns::id>, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::WhereClause<diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<comments::columns::id, diesel::expression::bound::Bound<diesel::sql_types::Integer, i32>>>>>, diesel::sql_types::Integer>>>>>` + = note: required because of the requirements on the impl of `diesel::query_dsl::LoadQuery<_, (i32,)>` for `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::WhereClause<diesel::expression::grouped::Grouped<diesel::expression::array_comparison::In<users::columns::id, diesel::expression::subselect::Subselect<diesel::query_builder::SelectStatement<posts::table, diesel::query_builder::select_clause::SelectClause<posts::columns::id>, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::WhereClause<diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<comments::columns::id, diesel::expression::bound::Bound<diesel::sql_types::Integer, i32>>>>>, diesel::sql_types::Integer>>>>>` + +error[E0271]: type mismatch resolving `<diesel::query_source::joins::Join<posts::table, users::table, diesel::query_source::joins::Inner> as diesel::query_source::AppearsInFromClause<comments::table>>::Count == diesel::query_source::Once` + --> $DIR/subselect_cannot_reference_random_tables.rs:38:10 + | +38 | .load::<(i32,)>(&conn); + | ^^^^ expected struct `diesel::query_source::Never`, found struct `diesel::query_source::Once` + | + = note: required because of the requirements on the impl of `diesel::AppearsOnTable<diesel::query_source::joins::Join<posts::table, users::table, diesel::query_source::joins::Inner>>` for `comments::columns::id` + = note: required because of the requirements on the impl of `diesel::AppearsOnTable<diesel::query_source::joins::Join<posts::table, users::table, diesel::query_source::joins::Inner>>` for `diesel::expression::operators::Eq<comments::columns::id, diesel::expression::bound::Bound<diesel::sql_types::Integer, i32>>` + = note: required because of the requirements on the impl of `diesel::AppearsOnTable<diesel::query_source::joins::Join<posts::table, users::table, diesel::query_source::joins::Inner>>` for `diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<comments::columns::id, diesel::expression::bound::Bound<diesel::sql_types::Integer, i32>>>` + = note: required because of the requirements on the impl of `diesel::query_builder::where_clause::ValidWhereClause<diesel::query_source::joins::Join<posts::table, users::table, diesel::query_source::joins::Inner>>` for `diesel::query_builder::where_clause::WhereClause<diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<comments::columns::id, diesel::expression::bound::Bound<diesel::sql_types::Integer, i32>>>>` + = note: required because of the requirements on the impl of `diesel::expression::subselect::ValidSubselect<users::table>` for `diesel::query_builder::SelectStatement<posts::table, diesel::query_builder::select_clause::SelectClause<posts::columns::id>, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::WhereClause<diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<comments::columns::id, diesel::expression::bound::Bound<diesel::sql_types::Integer, i32>>>>>` + = note: required because of the requirements on the impl of `diesel::AppearsOnTable<users::table>` for `diesel::expression::subselect::Subselect<diesel::query_builder::SelectStatement<posts::table, diesel::query_builder::select_clause::SelectClause<posts::columns::id>, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::WhereClause<diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<comments::columns::id, diesel::expression::bound::Bound<diesel::sql_types::Integer, i32>>>>>, diesel::sql_types::Array<diesel::sql_types::Integer>>` + = note: required because of the requirements on the impl of `diesel::AppearsOnTable<users::table>` for `diesel::pg::expression::array_comparison::Any<diesel::expression::subselect::Subselect<diesel::query_builder::SelectStatement<posts::table, diesel::query_builder::select_clause::SelectClause<posts::columns::id>, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::WhereClause<diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<comments::columns::id, diesel::expression::bound::Bound<diesel::sql_types::Integer, i32>>>>>, diesel::sql_types::Array<diesel::sql_types::Integer>>>` + = note: required because of the requirements on the impl of `diesel::AppearsOnTable<users::table>` for `diesel::expression::operators::Eq<users::columns::id, diesel::pg::expression::array_comparison::Any<diesel::expression::subselect::Subselect<diesel::query_builder::SelectStatement<posts::table, diesel::query_builder::select_clause::SelectClause<posts::columns::id>, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::WhereClause<diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<comments::columns::id, diesel::expression::bound::Bound<diesel::sql_types::Integer, i32>>>>>, diesel::sql_types::Array<diesel::sql_types::Integer>>>>` + = note: required because of the requirements on the impl of `diesel::AppearsOnTable<users::table>` for `diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<users::columns::id, diesel::pg::expression::array_comparison::Any<diesel::expression::subselect::Subselect<diesel::query_builder::SelectStatement<posts::table, diesel::query_builder::select_clause::SelectClause<posts::columns::id>, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::WhereClause<diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<comments::columns::id, diesel::expression::bound::Bound<diesel::sql_types::Integer, i32>>>>>, diesel::sql_types::Array<diesel::sql_types::Integer>>>>>` + = note: required because of the requirements on the impl of `diesel::query_builder::where_clause::ValidWhereClause<users::table>` for `diesel::query_builder::where_clause::WhereClause<diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<users::columns::id, diesel::pg::expression::array_comparison::Any<diesel::expression::subselect::Subselect<diesel::query_builder::SelectStatement<posts::table, diesel::query_builder::select_clause::SelectClause<posts::columns::id>, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::WhereClause<diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<comments::columns::id, diesel::expression::bound::Bound<diesel::sql_types::Integer, i32>>>>>, diesel::sql_types::Array<diesel::sql_types::Integer>>>>>>` + = note: required because of the requirements on the impl of `diesel::query_builder::Query` for `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::WhereClause<diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<users::columns::id, diesel::pg::expression::array_comparison::Any<diesel::expression::subselect::Subselect<diesel::query_builder::SelectStatement<posts::table, diesel::query_builder::select_clause::SelectClause<posts::columns::id>, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::WhereClause<diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<comments::columns::id, diesel::expression::bound::Bound<diesel::sql_types::Integer, i32>>>>>, diesel::sql_types::Array<diesel::sql_types::Integer>>>>>>>` + = note: required because of the requirements on the impl of `diesel::query_dsl::LoadQuery<_, (i32,)>` for `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::WhereClause<diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<users::columns::id, diesel::pg::expression::array_comparison::Any<diesel::expression::subselect::Subselect<diesel::query_builder::SelectStatement<posts::table, diesel::query_builder::select_clause::SelectClause<posts::columns::id>, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::WhereClause<diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<comments::columns::id, diesel::expression::bound::Bound<diesel::sql_types::Integer, i32>>>>>, diesel::sql_types::Array<diesel::sql_types::Integer>>>>>>>` + +error[E0271]: type mismatch resolving `<diesel::query_source::joins::Join<posts::table, users::table, diesel::query_source::joins::Inner> as diesel::query_source::AppearsInFromClause<comments::table>>::Count == diesel::query_source::Once` + --> $DIR/subselect_cannot_reference_random_tables.rs:42:10 + | +42 | .load::<(i32,)>(&conn); + | ^^^^ expected struct `diesel::query_source::Never`, found struct `diesel::query_source::Once` + | + = note: required because of the requirements on the impl of `diesel::AppearsOnTable<diesel::query_source::joins::Join<posts::table, users::table, diesel::query_source::joins::Inner>>` for `comments::columns::id` + = note: required because of the requirements on the impl of `diesel::AppearsOnTable<diesel::query_source::joins::Join<posts::table, users::table, diesel::query_source::joins::Inner>>` for `diesel::expression::operators::Eq<comments::columns::id, diesel::expression::bound::Bound<diesel::sql_types::Integer, i32>>` + = note: required because of the requirements on the impl of `diesel::AppearsOnTable<diesel::query_source::joins::Join<posts::table, users::table, diesel::query_source::joins::Inner>>` for `diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<comments::columns::id, diesel::expression::bound::Bound<diesel::sql_types::Integer, i32>>>` + = note: required because of the requirements on the impl of `diesel::query_builder::where_clause::ValidWhereClause<diesel::query_source::joins::Join<posts::table, users::table, diesel::query_source::joins::Inner>>` for `diesel::query_builder::where_clause::WhereClause<diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<comments::columns::id, diesel::expression::bound::Bound<diesel::sql_types::Integer, i32>>>>` + = note: required because of the requirements on the impl of `diesel::expression::subselect::ValidSubselect<users::table>` for `diesel::query_builder::SelectStatement<posts::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::WhereClause<diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<comments::columns::id, diesel::expression::bound::Bound<diesel::sql_types::Integer, i32>>>>>` + = note: required because of the requirements on the impl of `diesel::AppearsOnTable<users::table>` for `diesel::expression::subselect::Subselect<diesel::query_builder::SelectStatement<posts::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::WhereClause<diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<comments::columns::id, diesel::expression::bound::Bound<diesel::sql_types::Integer, i32>>>>>, diesel::sql_types::Bool>` + = note: required because of the requirements on the impl of `diesel::AppearsOnTable<users::table>` for `diesel::expression::exists::Exists<diesel::query_builder::SelectStatement<posts::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::WhereClause<diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<comments::columns::id, diesel::expression::bound::Bound<diesel::sql_types::Integer, i32>>>>>>` + = note: required because of the requirements on the impl of `diesel::query_builder::where_clause::ValidWhereClause<users::table>` for `diesel::query_builder::where_clause::WhereClause<diesel::expression::exists::Exists<diesel::query_builder::SelectStatement<posts::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::WhereClause<diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<comments::columns::id, diesel::expression::bound::Bound<diesel::sql_types::Integer, i32>>>>>>>` + = note: required because of the requirements on the impl of `diesel::query_builder::Query` for `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::WhereClause<diesel::expression::exists::Exists<diesel::query_builder::SelectStatement<posts::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::WhereClause<diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<comments::columns::id, diesel::expression::bound::Bound<diesel::sql_types::Integer, i32>>>>>>>>` + = note: required because of the requirements on the impl of `diesel::query_dsl::LoadQuery<_, (i32,)>` for `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::WhereClause<diesel::expression::exists::Exists<diesel::query_builder::SelectStatement<posts::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::WhereClause<diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<comments::columns::id, diesel::expression::bound::Bound<diesel::sql_types::Integer, i32>>>>>>>>` diff --git a/diesel_compile_tests/tests/compile-fail/subselect_requires_correct_type.rs b/diesel_compile_tests/tests/fail/subselect_requires_correct_type.rs similarity index 86% rename from diesel_compile_tests/tests/compile-fail/subselect_requires_correct_type.rs rename to diesel_compile_tests/tests/fail/subselect_requires_correct_type.rs index 41d9a80f33f4..861b0219474b 100644 --- a/diesel_compile_tests/tests/compile-fail/subselect_requires_correct_type.rs +++ b/diesel_compile_tests/tests/fail/subselect_requires_correct_type.rs @@ -1,4 +1,4 @@ -#[macro_use] extern crate diesel; +extern crate diesel; use diesel::*; @@ -20,5 +20,4 @@ fn main() { let conn = PgConnection::establish("").unwrap(); let subquery = users::table.filter(users::id.eq(1)); let query = posts::table.filter(posts::user_id.eq_any(subquery)); - //~^ ERROR E0277 } diff --git a/diesel_compile_tests/tests/fail/subselect_requires_correct_type.stderr b/diesel_compile_tests/tests/fail/subselect_requires_correct_type.stderr new file mode 100644 index 000000000000..ef575fea2547 --- /dev/null +++ b/diesel_compile_tests/tests/fail/subselect_requires_correct_type.stderr @@ -0,0 +1,8 @@ +error[E0277]: the trait bound `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::WhereClause<diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<users::columns::id, diesel::expression::bound::Bound<diesel::sql_types::Integer, i32>>>>>: diesel::expression::array_comparison::AsInExpression<diesel::sql_types::Integer>` is not satisfied + --> $DIR/subselect_requires_correct_type.rs:22:59 + | +22 | let query = posts::table.filter(posts::user_id.eq_any(subquery)); + | ^^^^^^^^ the trait `diesel::expression::array_comparison::AsInExpression<diesel::sql_types::Integer>` is not implemented for `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::WhereClause<diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<users::columns::id, diesel::expression::bound::Bound<diesel::sql_types::Integer, i32>>>>>` + | + = help: the following implementations were found: + <diesel::query_builder::SelectStatement<S, F, W, O, L, Of, G, LC> as diesel::expression::array_comparison::AsInExpression<ST>> diff --git a/diesel_compile_tests/tests/compile-fail/table_column_names.rs b/diesel_compile_tests/tests/fail/table_column_names.rs similarity index 100% rename from diesel_compile_tests/tests/compile-fail/table_column_names.rs rename to diesel_compile_tests/tests/fail/table_column_names.rs diff --git a/diesel_compile_tests/tests/fail/table_column_names.stderr b/diesel_compile_tests/tests/fail/table_column_names.stderr new file mode 100644 index 000000000000..128b8b67c04a --- /dev/null +++ b/diesel_compile_tests/tests/fail/table_column_names.stderr @@ -0,0 +1,15 @@ +error: Column `users` cannot be named the same as its table. + You may use `#[sql_name = "users"]` to reference the table's `users` column. + Docs available at: `https://docs.diesel.rs/diesel/macro.table.html` + + --> $DIR/table_column_names.rs:3:1 + | +3 | / table! { +4 | | users { +5 | | id -> Integer, +6 | | users -> Integer, +7 | | } +8 | | } + | |_^ + | + = note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info) diff --git a/diesel_compile_tests/tests/compile-fail/table_invalid_syntax_1.rs b/diesel_compile_tests/tests/fail/table_invalid_syntax_1.rs similarity index 100% rename from diesel_compile_tests/tests/compile-fail/table_invalid_syntax_1.rs rename to diesel_compile_tests/tests/fail/table_invalid_syntax_1.rs diff --git a/diesel_compile_tests/tests/fail/table_invalid_syntax_1.stderr b/diesel_compile_tests/tests/fail/table_invalid_syntax_1.stderr new file mode 100644 index 000000000000..b2dd27b8ea72 --- /dev/null +++ b/diesel_compile_tests/tests/fail/table_invalid_syntax_1.stderr @@ -0,0 +1,9 @@ +error: Invalid `table!` syntax. Please see the `table!` macro docs for more info. + --> $DIR/table_invalid_syntax_1.rs:3:1 + | +3 | / table! { +4 | | 12 +5 | | } + | |_^ + | + = note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info) diff --git a/diesel_compile_tests/tests/compile-fail/table_invalid_syntax_2.rs b/diesel_compile_tests/tests/fail/table_invalid_syntax_2.rs similarity index 100% rename from diesel_compile_tests/tests/compile-fail/table_invalid_syntax_2.rs rename to diesel_compile_tests/tests/fail/table_invalid_syntax_2.rs diff --git a/diesel_compile_tests/tests/fail/table_invalid_syntax_2.stderr b/diesel_compile_tests/tests/fail/table_invalid_syntax_2.stderr new file mode 100644 index 000000000000..fa68ef9edbd4 --- /dev/null +++ b/diesel_compile_tests/tests/fail/table_invalid_syntax_2.stderr @@ -0,0 +1,9 @@ +error: Invalid `table!` syntax. Please see the `table!` macro docs for more info. + --> $DIR/table_invalid_syntax_2.rs:3:1 + | +3 | / table! { +4 | | some wrong syntax +5 | | } + | |_^ + | + = note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info) diff --git a/diesel_compile_tests/tests/compile-fail/update_requires_column_be_from_same_table.rs b/diesel_compile_tests/tests/fail/update_requires_column_be_from_same_table.rs similarity index 85% rename from diesel_compile_tests/tests/compile-fail/update_requires_column_be_from_same_table.rs rename to diesel_compile_tests/tests/fail/update_requires_column_be_from_same_table.rs index eddc1b3c0aa2..96812ecdb47e 100644 --- a/diesel_compile_tests/tests/compile-fail/update_requires_column_be_from_same_table.rs +++ b/diesel_compile_tests/tests/fail/update_requires_column_be_from_same_table.rs @@ -1,4 +1,3 @@ -#[macro_use] extern crate diesel; use diesel::*; @@ -21,7 +20,5 @@ fn main() { use self::users::dsl::*; let command = update(users).set(posts::title.eq("Hello")); - //~^ ERROR type mismatch let command = update(users).set(name.eq(posts::title)); - //~^ ERROR E0277 } diff --git a/diesel_compile_tests/tests/fail/update_requires_column_be_from_same_table.stderr b/diesel_compile_tests/tests/fail/update_requires_column_be_from_same_table.stderr new file mode 100644 index 000000000000..f5d8058b054c --- /dev/null +++ b/diesel_compile_tests/tests/fail/update_requires_column_be_from_same_table.stderr @@ -0,0 +1,16 @@ +error[E0271]: type mismatch resolving `<diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<posts::columns::title, diesel::expression::bound::Bound<diesel::sql_types::Text, &str>>> as diesel::AsChangeset>::Target == users::table` + --> $DIR/update_requires_column_be_from_same_table.rs:22:33 + | +22 | let command = update(users).set(posts::title.eq("Hello")); + | ^^^ expected struct `posts::table`, found struct `users::table` + +error[E0277]: the trait bound `users::table: diesel::query_source::AppearsInFromClause<posts::table>` is not satisfied + --> $DIR/update_requires_column_be_from_same_table.rs:23:33 + | +23 | let command = update(users).set(name.eq(posts::title)); + | ^^^ the trait `diesel::query_source::AppearsInFromClause<posts::table>` is not implemented for `users::table` + | + = help: the following implementations were found: + <users::table as diesel::query_source::AppearsInFromClause<users::table>> + = note: required because of the requirements on the impl of `diesel::AppearsOnTable<users::table>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::AsChangeset` for `diesel::expression::operators::Eq<users::columns::name, posts::columns::title>` diff --git a/diesel_compile_tests/tests/compile-fail/update_requires_left_side_of_eq_to_be_a_column.rs b/diesel_compile_tests/tests/fail/update_requires_left_side_of_eq_to_be_a_column.rs similarity index 88% rename from diesel_compile_tests/tests/compile-fail/update_requires_left_side_of_eq_to_be_a_column.rs rename to diesel_compile_tests/tests/fail/update_requires_left_side_of_eq_to_be_a_column.rs index 70bb604b935e..96ac2848d6d7 100644 --- a/diesel_compile_tests/tests/compile-fail/update_requires_left_side_of_eq_to_be_a_column.rs +++ b/diesel_compile_tests/tests/fail/update_requires_left_side_of_eq_to_be_a_column.rs @@ -1,4 +1,3 @@ -#[macro_use] extern crate diesel; use diesel::*; @@ -15,5 +14,4 @@ fn main() { let foo = "foo".into_sql::<sql_types::VarChar>(); let command = update(users).set(foo.eq(name)); - //~^ ERROR Column } diff --git a/diesel_compile_tests/tests/fail/update_requires_left_side_of_eq_to_be_a_column.stderr b/diesel_compile_tests/tests/fail/update_requires_left_side_of_eq_to_be_a_column.stderr new file mode 100644 index 000000000000..3aa997b9ae42 --- /dev/null +++ b/diesel_compile_tests/tests/fail/update_requires_left_side_of_eq_to_be_a_column.stderr @@ -0,0 +1,7 @@ +error[E0277]: the trait bound `diesel::expression::bound::Bound<diesel::sql_types::Text, &str>: diesel::Column` is not satisfied + --> $DIR/update_requires_left_side_of_eq_to_be_a_column.rs:16:37 + | +16 | let command = update(users).set(foo.eq(name)); + | ^^^^^^^^^^^^ the trait `diesel::Column` is not implemented for `diesel::expression::bound::Bound<diesel::sql_types::Text, &str>` + | + = note: required because of the requirements on the impl of `diesel::AsChangeset` for `diesel::expression::operators::Eq<diesel::expression::bound::Bound<diesel::sql_types::Text, &str>, users::columns::name>` diff --git a/diesel_compile_tests/tests/compile-fail/update_requires_set.rs b/diesel_compile_tests/tests/fail/update_requires_set.rs similarity index 57% rename from diesel_compile_tests/tests/compile-fail/update_requires_set.rs rename to diesel_compile_tests/tests/fail/update_requires_set.rs index 214fcf8e152f..5dbda6f3e367 100644 --- a/diesel_compile_tests/tests/compile-fail/update_requires_set.rs +++ b/diesel_compile_tests/tests/fail/update_requires_set.rs @@ -1,4 +1,4 @@ -#[macro_use] extern crate diesel; +extern crate diesel; use diesel::*; @@ -12,5 +12,4 @@ fn main() { let conn = SqliteConnection::establish(":memory:").unwrap(); update(users::table) .execute(&conn); - //~^ ERROR diesel::query_builder::update_statement::SetNotCalled: diesel::query_builder::QueryFragment<_> } diff --git a/diesel_compile_tests/tests/fail/update_requires_set.stderr b/diesel_compile_tests/tests/fail/update_requires_set.stderr new file mode 100644 index 000000000000..bdf8cc438ff5 --- /dev/null +++ b/diesel_compile_tests/tests/fail/update_requires_set.stderr @@ -0,0 +1,8 @@ +error[E0277]: the trait bound `diesel::query_builder::update_statement::SetNotCalled: diesel::query_builder::QueryFragment<_>` is not satisfied + --> $DIR/update_requires_set.rs:14:10 + | +14 | .execute(&conn); + | ^^^^^^^ the trait `diesel::query_builder::QueryFragment<_>` is not implemented for `diesel::query_builder::update_statement::SetNotCalled` + | + = note: required because of the requirements on the impl of `diesel::query_builder::QueryFragment<_>` for `diesel::query_builder::UpdateStatement<users::table, diesel::query_builder::where_clause::NoWhereClause>` + = note: required because of the requirements on the impl of `diesel::query_dsl::load_dsl::ExecuteDsl<_, _>` for `diesel::query_builder::UpdateStatement<users::table, diesel::query_builder::where_clause::NoWhereClause>` diff --git a/diesel_compile_tests/tests/compile-fail/update_requires_valid_where_clause.rs b/diesel_compile_tests/tests/fail/update_requires_valid_where_clause.rs similarity index 76% rename from diesel_compile_tests/tests/compile-fail/update_requires_valid_where_clause.rs rename to diesel_compile_tests/tests/fail/update_requires_valid_where_clause.rs index 4865e25579b5..6f5da49ae721 100644 --- a/diesel_compile_tests/tests/compile-fail/update_requires_valid_where_clause.rs +++ b/diesel_compile_tests/tests/fail/update_requires_valid_where_clause.rs @@ -1,4 +1,4 @@ -#[macro_use] extern crate diesel; +extern crate diesel; use diesel::*; @@ -19,13 +19,9 @@ fn main() { update(users::table).filter(users::id.eq(1)); update(users::table.filter(posts::id.eq(1))); - //~^ ERROR E0277 - //~| ERROR E0277 update(users::table).filter(posts::id.eq(1)); - //~^ ERROR E0277 update(users::table).set(users::id.eq(1)) .filter(posts::id.eq(1)); - //~^ ERROR E0277 } diff --git a/diesel_compile_tests/tests/fail/update_requires_valid_where_clause.stderr b/diesel_compile_tests/tests/fail/update_requires_valid_where_clause.stderr new file mode 100644 index 000000000000..c102b8494f88 --- /dev/null +++ b/diesel_compile_tests/tests/fail/update_requires_valid_where_clause.stderr @@ -0,0 +1,48 @@ +error[E0277]: the trait bound `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::WhereClause<diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<posts::columns::id, diesel::expression::bound::Bound<diesel::sql_types::Integer, i32>>>>>: diesel::query_builder::IntoUpdateTarget` is not satisfied + --> $DIR/update_requires_valid_where_clause.rs:21:12 + | +21 | update(users::table.filter(posts::id.eq(1))); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `diesel::query_builder::IntoUpdateTarget` is not implemented for `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::WhereClause<diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<posts::columns::id, diesel::expression::bound::Bound<diesel::sql_types::Integer, i32>>>>>` + | + ::: $WORKSPACE/diesel/src/query_builder/functions.rs + | + | pub fn update<T: IntoUpdateTarget>(source: T) -> UpdateStatement<T::Table, T::WhereClause> { + | ---------------- required by this bound in `diesel::update` + | + = help: the following implementations were found: + <diesel::query_builder::SelectStatement<F, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, W> as diesel::query_builder::IntoUpdateTarget> + +error[E0277]: the trait bound `users::table: diesel::query_source::AppearsInFromClause<posts::table>` is not satisfied + --> $DIR/update_requires_valid_where_clause.rs:23:26 + | +23 | update(users::table).filter(posts::id.eq(1)); + | ^^^^^^ the trait `diesel::query_source::AppearsInFromClause<posts::table>` is not implemented for `users::table` + | + = help: the following implementations were found: + <users::table as diesel::query_source::AppearsInFromClause<users::table>> + = note: required because of the requirements on the impl of `diesel::AppearsOnTable<users::table>` for `posts::columns::id` + = note: required because of the requirements on the impl of `diesel::AppearsOnTable<users::table>` for `diesel::expression::operators::Eq<posts::columns::id, diesel::expression::bound::Bound<diesel::sql_types::Integer, i32>>` + = note: required because of the requirements on the impl of `diesel::AppearsOnTable<users::table>` for `diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<posts::columns::id, diesel::expression::bound::Bound<diesel::sql_types::Integer, i32>>>` + = note: required because of the requirements on the impl of `diesel::query_dsl::filter_dsl::FilterDsl<diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<posts::columns::id, diesel::expression::bound::Bound<diesel::sql_types::Integer, i32>>>>` for `diesel::query_builder::UpdateStatement<users::table, diesel::query_builder::where_clause::NoWhereClause>` + +error[E0277]: the trait bound `users::table: diesel::query_source::AppearsInFromClause<posts::table>` is not satisfied + --> $DIR/update_requires_valid_where_clause.rs:26:10 + | +26 | .filter(posts::id.eq(1)); + | ^^^^^^ the trait `diesel::query_source::AppearsInFromClause<posts::table>` is not implemented for `users::table` + | + = help: the following implementations were found: + <users::table as diesel::query_source::AppearsInFromClause<users::table>> + = note: required because of the requirements on the impl of `diesel::AppearsOnTable<users::table>` for `posts::columns::id` + = note: required because of the requirements on the impl of `diesel::AppearsOnTable<users::table>` for `diesel::expression::operators::Eq<posts::columns::id, diesel::expression::bound::Bound<diesel::sql_types::Integer, i32>>` + = note: required because of the requirements on the impl of `diesel::AppearsOnTable<users::table>` for `diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<posts::columns::id, diesel::expression::bound::Bound<diesel::sql_types::Integer, i32>>>` + = note: required because of the requirements on the impl of `diesel::query_dsl::filter_dsl::FilterDsl<diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<posts::columns::id, diesel::expression::bound::Bound<diesel::sql_types::Integer, i32>>>>` for `diesel::query_builder::UpdateStatement<users::table, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::update_statement::changeset::Assign<users::columns::id, diesel::expression::bound::Bound<diesel::sql_types::Integer, i32>>>` + +error[E0277]: the trait bound `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::WhereClause<diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<posts::columns::id, diesel::expression::bound::Bound<diesel::sql_types::Integer, i32>>>>>: diesel::query_builder::IntoUpdateTarget` is not satisfied + --> $DIR/update_requires_valid_where_clause.rs:21:5 + | +21 | update(users::table.filter(posts::id.eq(1))); + | ^^^^^^ the trait `diesel::query_builder::IntoUpdateTarget` is not implemented for `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::WhereClause<diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<posts::columns::id, diesel::expression::bound::Bound<diesel::sql_types::Integer, i32>>>>>` + | + = help: the following implementations were found: + <diesel::query_builder::SelectStatement<F, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, W> as diesel::query_builder::IntoUpdateTarget> diff --git a/diesel_compile_tests/tests/compile-fail/update_statement_does_not_support_returning_methods_on_sqlite.rs b/diesel_compile_tests/tests/fail/update_statement_does_not_support_returning_methods_on_sqlite.rs similarity index 83% rename from diesel_compile_tests/tests/compile-fail/update_statement_does_not_support_returning_methods_on_sqlite.rs rename to diesel_compile_tests/tests/fail/update_statement_does_not_support_returning_methods_on_sqlite.rs index fe842acbe3d6..4a833dbe5786 100644 --- a/diesel_compile_tests/tests/compile-fail/update_statement_does_not_support_returning_methods_on_sqlite.rs +++ b/diesel_compile_tests/tests/fail/update_statement_does_not_support_returning_methods_on_sqlite.rs @@ -1,4 +1,3 @@ -#[macro_use] extern crate diesel; use diesel::*; @@ -17,11 +16,9 @@ fn main() { update(users.filter(id.eq(1))) .set(name.eq("Bill")) .get_result(&connection); - //~^ ERROR SupportsReturningClause update(users.filter(id.eq(1))) .set(name.eq("Bill")) .returning(name) .get_result(&connection); - //~^ ERROR SupportsReturningClause } diff --git a/diesel_compile_tests/tests/fail/update_statement_does_not_support_returning_methods_on_sqlite.stderr b/diesel_compile_tests/tests/fail/update_statement_does_not_support_returning_methods_on_sqlite.stderr new file mode 100644 index 000000000000..b196fe4c3fba --- /dev/null +++ b/diesel_compile_tests/tests/fail/update_statement_does_not_support_returning_methods_on_sqlite.stderr @@ -0,0 +1,19 @@ +error[E0277]: the trait bound `diesel::sqlite::Sqlite: diesel::backend::SupportsReturningClause` is not satisfied + --> $DIR/update_statement_does_not_support_returning_methods_on_sqlite.rs:18:10 + | +18 | .get_result(&connection); + | ^^^^^^^^^^ the trait `diesel::backend::SupportsReturningClause` is not implemented for `diesel::sqlite::Sqlite` + | + = note: required because of the requirements on the impl of `diesel::query_builder::QueryFragment<diesel::sqlite::Sqlite>` for `diesel::query_builder::returning_clause::ReturningClause<(users::columns::id, users::columns::name)>` + = note: required because of the requirements on the impl of `diesel::query_builder::QueryFragment<diesel::sqlite::Sqlite>` for `diesel::query_builder::UpdateStatement<users::table, diesel::query_builder::where_clause::WhereClause<diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<users::columns::id, diesel::expression::bound::Bound<diesel::sql_types::Integer, i32>>>>, diesel::query_builder::update_statement::changeset::Assign<users::columns::name, diesel::expression::bound::Bound<diesel::sql_types::Text, &str>>, diesel::query_builder::returning_clause::ReturningClause<(users::columns::id, users::columns::name)>>` + = note: required because of the requirements on the impl of `diesel::query_dsl::LoadQuery<diesel::SqliteConnection, _>` for `diesel::query_builder::UpdateStatement<users::table, diesel::query_builder::where_clause::WhereClause<diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<users::columns::id, diesel::expression::bound::Bound<diesel::sql_types::Integer, i32>>>>, diesel::query_builder::update_statement::changeset::Assign<users::columns::name, diesel::expression::bound::Bound<diesel::sql_types::Text, &str>>>` + +error[E0277]: the trait bound `diesel::sqlite::Sqlite: diesel::backend::SupportsReturningClause` is not satisfied + --> $DIR/update_statement_does_not_support_returning_methods_on_sqlite.rs:23:10 + | +23 | .get_result(&connection); + | ^^^^^^^^^^ the trait `diesel::backend::SupportsReturningClause` is not implemented for `diesel::sqlite::Sqlite` + | + = note: required because of the requirements on the impl of `diesel::query_builder::QueryFragment<diesel::sqlite::Sqlite>` for `diesel::query_builder::returning_clause::ReturningClause<users::columns::name>` + = note: required because of the requirements on the impl of `diesel::query_builder::QueryFragment<diesel::sqlite::Sqlite>` for `diesel::query_builder::UpdateStatement<users::table, diesel::query_builder::where_clause::WhereClause<diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<users::columns::id, diesel::expression::bound::Bound<diesel::sql_types::Integer, i32>>>>, diesel::query_builder::update_statement::changeset::Assign<users::columns::name, diesel::expression::bound::Bound<diesel::sql_types::Text, &str>>, diesel::query_builder::returning_clause::ReturningClause<users::columns::name>>` + = note: required because of the requirements on the impl of `diesel::query_dsl::LoadQuery<diesel::SqliteConnection, _>` for `diesel::query_builder::UpdateStatement<users::table, diesel::query_builder::where_clause::WhereClause<diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<users::columns::id, diesel::expression::bound::Bound<diesel::sql_types::Integer, i32>>>>, diesel::query_builder::update_statement::changeset::Assign<users::columns::name, diesel::expression::bound::Bound<diesel::sql_types::Text, &str>>, diesel::query_builder::returning_clause::ReturningClause<users::columns::name>>` diff --git a/diesel_compile_tests/tests/ui/upsert_with_multiple_values_not_supported_on_sqlite.rs b/diesel_compile_tests/tests/fail/upsert_with_multiple_values_not_supported_on_sqlite.rs similarity index 100% rename from diesel_compile_tests/tests/ui/upsert_with_multiple_values_not_supported_on_sqlite.rs rename to diesel_compile_tests/tests/fail/upsert_with_multiple_values_not_supported_on_sqlite.rs diff --git a/diesel_compile_tests/tests/ui/upsert_with_multiple_values_not_supported_on_sqlite.stderr b/diesel_compile_tests/tests/fail/upsert_with_multiple_values_not_supported_on_sqlite.stderr similarity index 95% rename from diesel_compile_tests/tests/ui/upsert_with_multiple_values_not_supported_on_sqlite.stderr rename to diesel_compile_tests/tests/fail/upsert_with_multiple_values_not_supported_on_sqlite.stderr index e38a926e43da..7cc7039dc8db 100644 --- a/diesel_compile_tests/tests/ui/upsert_with_multiple_values_not_supported_on_sqlite.stderr +++ b/diesel_compile_tests/tests/fail/upsert_with_multiple_values_not_supported_on_sqlite.stderr @@ -8,7 +8,3 @@ error[E0277]: the trait bound `diesel::sqlite::Sqlite: diesel::backend::Supports = note: required because of the requirements on the impl of `diesel::query_builder::QueryFragment<diesel::sqlite::Sqlite>` for `diesel::query_builder::upsert::on_conflict_clause::OnConflictValues<diesel::insertable::OwnedBatchInsert<diesel::query_builder::ValuesClause<diesel::insertable::ColumnInsertValue<users::columns::id, diesel::expression::bound::Bound<diesel::sql_types::Integer, i32>>, users::table>, users::table>, diesel::query_builder::upsert::on_conflict_target::NoConflictTarget, diesel::query_builder::upsert::on_conflict_actions::DoNothing>` = note: required because of the requirements on the impl of `diesel::query_builder::QueryFragment<diesel::sqlite::Sqlite>` for `diesel::query_builder::InsertStatement<users::table, diesel::query_builder::upsert::on_conflict_clause::OnConflictValues<diesel::insertable::OwnedBatchInsert<diesel::query_builder::ValuesClause<diesel::insertable::ColumnInsertValue<users::columns::id, diesel::expression::bound::Bound<diesel::sql_types::Integer, i32>>, users::table>, users::table>, diesel::query_builder::upsert::on_conflict_target::NoConflictTarget, diesel::query_builder::upsert::on_conflict_actions::DoNothing>>` = note: required because of the requirements on the impl of `diesel::query_dsl::load_dsl::ExecuteDsl<diesel::SqliteConnection, diesel::sqlite::Sqlite>` for `diesel::query_builder::InsertStatement<users::table, diesel::query_builder::upsert::on_conflict_clause::OnConflictValues<diesel::insertable::OwnedBatchInsert<diesel::query_builder::ValuesClause<diesel::insertable::ColumnInsertValue<users::columns::id, diesel::expression::bound::Bound<diesel::sql_types::Integer, i32>>, users::table>, users::table>, diesel::query_builder::upsert::on_conflict_target::NoConflictTarget, diesel::query_builder::upsert::on_conflict_actions::DoNothing>>` - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0277`. diff --git a/diesel_compile_tests/tests/compile-fail/user_defined_functions_follow_same_selection_rules.rs b/diesel_compile_tests/tests/fail/user_defined_functions_follow_same_selection_rules.rs similarity index 85% rename from diesel_compile_tests/tests/compile-fail/user_defined_functions_follow_same_selection_rules.rs rename to diesel_compile_tests/tests/fail/user_defined_functions_follow_same_selection_rules.rs index 24a02aa34163..1aba2dbe1813 100644 --- a/diesel_compile_tests/tests/compile-fail/user_defined_functions_follow_same_selection_rules.rs +++ b/diesel_compile_tests/tests/fail/user_defined_functions_follow_same_selection_rules.rs @@ -1,4 +1,4 @@ -#[macro_use] extern crate diesel; +extern crate diesel; use diesel::*; use diesel::sql_types::*; @@ -33,9 +33,7 @@ fn main() { let conn = PgConnection::establish("").unwrap(); let _ = users::table.filter(name.eq(foo(1))); - //~^ ERROR type mismatch let _ = users::table.filter(name.eq(bar(title))) .load::<User>(&conn); - //~^ ERROR AppearsInFromClause } diff --git a/diesel_compile_tests/tests/fail/user_defined_functions_follow_same_selection_rules.stderr b/diesel_compile_tests/tests/fail/user_defined_functions_follow_same_selection_rules.stderr new file mode 100644 index 000000000000..f550475878e1 --- /dev/null +++ b/diesel_compile_tests/tests/fail/user_defined_functions_follow_same_selection_rules.stderr @@ -0,0 +1,23 @@ +error[E0271]: type mismatch resolving `<foo::foo<diesel::expression::bound::Bound<diesel::sql_types::Integer, i32>> as diesel::Expression>::SqlType == diesel::sql_types::Text` + --> $DIR/user_defined_functions_follow_same_selection_rules.rs:35:38 + | +35 | let _ = users::table.filter(name.eq(foo(1))); + | ^^ expected struct `diesel::sql_types::Integer`, found struct `diesel::sql_types::Text` + | + = note: required because of the requirements on the impl of `diesel::expression::as_expression_impl::AsExpressionHelper<diesel::sql_types::Text>` for `diesel::expression::as_expression_impl::ExpressionImplHelper<foo::foo<diesel::expression::bound::Bound<diesel::sql_types::Integer, i32>>, diesel::sql_types::is_nullable::NotNull, diesel::sql_types::is_nullable::NotNull>` + +error[E0277]: the trait bound `users::table: diesel::query_source::AppearsInFromClause<posts::table>` is not satisfied + --> $DIR/user_defined_functions_follow_same_selection_rules.rs:38:10 + | +38 | .load::<User>(&conn); + | ^^^^ the trait `diesel::query_source::AppearsInFromClause<posts::table>` is not implemented for `users::table` + | + = help: the following implementations were found: + <users::table as diesel::query_source::AppearsInFromClause<users::table>> + = note: required because of the requirements on the impl of `diesel::AppearsOnTable<users::table>` for `posts::columns::title` + = note: required because of the requirements on the impl of `diesel::AppearsOnTable<users::table>` for `bar::bar<posts::columns::title>` + = note: required because of the requirements on the impl of `diesel::AppearsOnTable<users::table>` for `diesel::expression::operators::Eq<users::columns::name, bar::bar<posts::columns::title>>` + = note: required because of the requirements on the impl of `diesel::AppearsOnTable<users::table>` for `diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<users::columns::name, bar::bar<posts::columns::title>>>` + = note: required because of the requirements on the impl of `diesel::query_builder::where_clause::ValidWhereClause<users::table>` for `diesel::query_builder::where_clause::WhereClause<diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<users::columns::name, bar::bar<posts::columns::title>>>>` + = note: required because of the requirements on the impl of `diesel::query_builder::Query` for `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::WhereClause<diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<users::columns::name, bar::bar<posts::columns::title>>>>>` + = note: required because of the requirements on the impl of `diesel::query_dsl::LoadQuery<_, User>` for `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::WhereClause<diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<users::columns::name, bar::bar<posts::columns::title>>>>>` diff --git a/diesel_compile_tests/tests/compile-fail/valid_grouping_and_boxed_expressions.rs b/diesel_compile_tests/tests/fail/valid_grouping_and_boxed_expressions.rs similarity index 94% rename from diesel_compile_tests/tests/compile-fail/valid_grouping_and_boxed_expressions.rs rename to diesel_compile_tests/tests/fail/valid_grouping_and_boxed_expressions.rs index 4978e44373ca..f115ff4f556e 100644 --- a/diesel_compile_tests/tests/compile-fail/valid_grouping_and_boxed_expressions.rs +++ b/diesel_compile_tests/tests/fail/valid_grouping_and_boxed_expressions.rs @@ -69,9 +69,7 @@ fn main() { users::table .group_by(users::id) .select(some_ungrouped_expression(true)) - //~^ ERROR ValidGrouping .load::<i32>(&conn); - //~^ ERROR ValidGrouping // it's fine to pass this to some query without group by clause // rustc should infer the correct bounds here @@ -88,7 +86,6 @@ fn main() { users::table .group_by(users::name) .select(maybe_grouped(true)) - //~^ ERROR IsContainedInGroupBy .load::<i32>(&conn); // aggregated expressions work to @@ -105,12 +102,10 @@ fn main() { // but we cannot mix a aggregated expression with an non aggregate one users::table .select(( - //~^ ERROR MixedAggregates something_that_is_aggregate(), some_ungrouped_expression(false), )) .load::<(Option<i32>, i32)>(&conn); - //~^ ERROR MixedAggregates // using two potential aggregated expressions works users::table diff --git a/diesel_compile_tests/tests/fail/valid_grouping_and_boxed_expressions.stderr b/diesel_compile_tests/tests/fail/valid_grouping_and_boxed_expressions.stderr new file mode 100644 index 000000000000..c1e2ababa86b --- /dev/null +++ b/diesel_compile_tests/tests/fail/valid_grouping_and_boxed_expressions.stderr @@ -0,0 +1,67 @@ +warning: unused import: `MixedAggregates` + --> $DIR/valid_grouping_and_boxed_expressions.rs:3:40 + | +3 | use diesel::expression::{is_aggregate, MixedAggregates, ValidGrouping}; + | ^^^^^^^^^^^^^^^ + | + = note: `#[warn(unused_imports)]` on by default + +error[E0277]: the trait bound `dyn diesel::BoxableExpression<users::table, diesel::pg::Pg, SqlType = diesel::sql_types::Integer>: diesel::expression::ValidGrouping<users::columns::id>` is not satisfied + --> $DIR/valid_grouping_and_boxed_expressions.rs:71:17 + | +71 | .select(some_ungrouped_expression(true)) + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `diesel::expression::ValidGrouping<users::columns::id>` is not implemented for `dyn diesel::BoxableExpression<users::table, diesel::pg::Pg, SqlType = diesel::sql_types::Integer>` + | + = help: the following implementations were found: + <(dyn diesel::BoxableExpression<QS, DB, GB, IsAggregate, SqlType = ST> + 'a) as diesel::expression::ValidGrouping<GB>> + = note: required because of the requirements on the impl of `diesel::expression::ValidGrouping<users::columns::id>` for `std::boxed::Box<dyn diesel::BoxableExpression<users::table, diesel::pg::Pg, SqlType = diesel::sql_types::Integer>>` + = note: required because of the requirements on the impl of `diesel::query_dsl::select_dsl::SelectDsl<std::boxed::Box<dyn diesel::BoxableExpression<users::table, diesel::pg::Pg, SqlType = diesel::sql_types::Integer>>>` for `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::GroupByClause<users::columns::id>>` + +error[E0277]: the trait bound `dyn diesel::BoxableExpression<users::table, diesel::pg::Pg, SqlType = diesel::sql_types::Integer>: diesel::expression::ValidGrouping<users::columns::id>` is not satisfied + --> $DIR/valid_grouping_and_boxed_expressions.rs:72:10 + | +72 | .load::<i32>(&conn); + | ^^^^ the trait `diesel::expression::ValidGrouping<users::columns::id>` is not implemented for `dyn diesel::BoxableExpression<users::table, diesel::pg::Pg, SqlType = diesel::sql_types::Integer>` + | + = help: the following implementations were found: + <(dyn diesel::BoxableExpression<QS, DB, GB, IsAggregate, SqlType = ST> + 'a) as diesel::expression::ValidGrouping<GB>> + = note: required because of the requirements on the impl of `diesel::expression::ValidGrouping<users::columns::id>` for `std::boxed::Box<dyn diesel::BoxableExpression<users::table, diesel::pg::Pg, SqlType = diesel::sql_types::Integer>>` + = note: required because of the requirements on the impl of `diesel::query_builder::Query` for `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::SelectClause<std::boxed::Box<dyn diesel::BoxableExpression<users::table, diesel::pg::Pg, SqlType = diesel::sql_types::Integer>>>, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::GroupByClause<users::columns::id>>` + = note: required because of the requirements on the impl of `diesel::query_dsl::LoadQuery<_, i32>` for `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::SelectClause<std::boxed::Box<dyn diesel::BoxableExpression<users::table, diesel::pg::Pg, SqlType = diesel::sql_types::Integer>>>, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::NoWhereClause, diesel::query_builder::order_clause::NoOrderClause, diesel::query_builder::LimitOffsetClause<diesel::query_builder::NoLimitClause, diesel::query_builder::NoOffsetClause>, diesel::query_builder::group_by_clause::GroupByClause<users::columns::id>>` + +error[E0271]: type mismatch resolving `<users::columns::name as diesel::expression::IsContainedInGroupBy<users::columns::id>>::Output == diesel::expression::is_contained_in_group_by::Yes` + --> $DIR/valid_grouping_and_boxed_expressions.rs:88:17 + | +88 | .select(maybe_grouped(true)) + | ^^^^^^^^^^^^^ expected struct `diesel::expression::is_contained_in_group_by::No`, found struct `diesel::expression::is_contained_in_group_by::Yes` + | + = note: required because of the requirements on the impl of `diesel::expression::ValidGrouping<users::columns::name>` for `users::columns::id` + +error[E0277]: the trait bound `diesel::expression::is_aggregate::Yes: diesel::expression::MixedAggregates<diesel::expression::is_aggregate::No>` is not satisfied + --> $DIR/valid_grouping_and_boxed_expressions.rs:104:17 + | +104 | .select(( + | _________________^ +105 | | something_that_is_aggregate(), +106 | | some_ungrouped_expression(false), +107 | | )) + | |_________^ the trait `diesel::expression::MixedAggregates<diesel::expression::is_aggregate::No>` is not implemented for `diesel::expression::is_aggregate::Yes` + | + = help: the following implementations were found: + <diesel::expression::is_aggregate::Yes as diesel::expression::MixedAggregates<diesel::expression::is_aggregate::Never>> + <diesel::expression::is_aggregate::Yes as diesel::expression::MixedAggregates<diesel::expression::is_aggregate::Yes>> + = note: required because of the requirements on the impl of `diesel::expression::ValidGrouping<()>` for `(std::boxed::Box<dyn diesel::BoxableExpression<users::table, diesel::pg::Pg, (), diesel::expression::is_aggregate::Yes, SqlType = diesel::sql_types::Nullable<diesel::sql_types::Integer>>>, std::boxed::Box<dyn diesel::BoxableExpression<users::table, diesel::pg::Pg, SqlType = diesel::sql_types::Integer>>)` + = note: required because of the requirements on the impl of `diesel::query_dsl::select_dsl::SelectDsl<(std::boxed::Box<dyn diesel::BoxableExpression<users::table, diesel::pg::Pg, (), diesel::expression::is_aggregate::Yes, SqlType = diesel::sql_types::Nullable<diesel::sql_types::Integer>>>, std::boxed::Box<dyn diesel::BoxableExpression<users::table, diesel::pg::Pg, SqlType = diesel::sql_types::Integer>>)>` for `diesel::query_builder::SelectStatement<users::table>` + +error[E0277]: the trait bound `diesel::expression::is_aggregate::Yes: diesel::expression::MixedAggregates<diesel::expression::is_aggregate::No>` is not satisfied + --> $DIR/valid_grouping_and_boxed_expressions.rs:108:10 + | +108 | .load::<(Option<i32>, i32)>(&conn); + | ^^^^ the trait `diesel::expression::MixedAggregates<diesel::expression::is_aggregate::No>` is not implemented for `diesel::expression::is_aggregate::Yes` + | + = help: the following implementations were found: + <diesel::expression::is_aggregate::Yes as diesel::expression::MixedAggregates<diesel::expression::is_aggregate::Never>> + <diesel::expression::is_aggregate::Yes as diesel::expression::MixedAggregates<diesel::expression::is_aggregate::Yes>> + = note: required because of the requirements on the impl of `diesel::expression::ValidGrouping<()>` for `(std::boxed::Box<dyn diesel::BoxableExpression<users::table, diesel::pg::Pg, (), diesel::expression::is_aggregate::Yes, SqlType = diesel::sql_types::Nullable<diesel::sql_types::Integer>>>, std::boxed::Box<dyn diesel::BoxableExpression<users::table, diesel::pg::Pg, SqlType = diesel::sql_types::Integer>>)` + = note: required because of the requirements on the impl of `diesel::query_builder::Query` for `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::SelectClause<(std::boxed::Box<dyn diesel::BoxableExpression<users::table, diesel::pg::Pg, (), diesel::expression::is_aggregate::Yes, SqlType = diesel::sql_types::Nullable<diesel::sql_types::Integer>>>, std::boxed::Box<dyn diesel::BoxableExpression<users::table, diesel::pg::Pg, SqlType = diesel::sql_types::Integer>>)>>` + = note: required because of the requirements on the impl of `diesel::query_dsl::LoadQuery<_, (std::option::Option<i32>, i32)>` for `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::SelectClause<(std::boxed::Box<dyn diesel::BoxableExpression<users::table, diesel::pg::Pg, (), diesel::expression::is_aggregate::Yes, SqlType = diesel::sql_types::Nullable<diesel::sql_types::Integer>>>, std::boxed::Box<dyn diesel::BoxableExpression<users::table, diesel::pg::Pg, SqlType = diesel::sql_types::Integer>>)>>` diff --git a/diesel_compile_tests/tests/trybuild.rs b/diesel_compile_tests/tests/trybuild.rs new file mode 100644 index 000000000000..82122d5b7abf --- /dev/null +++ b/diesel_compile_tests/tests/trybuild.rs @@ -0,0 +1,7 @@ +extern crate trybuild; + +#[test] +fn trybuild() { + let t = trybuild::TestCases::new(); + t.compile_fail("tests/fail/*.rs"); +} diff --git a/diesel_compile_tests/tests/ui/as_changeset_on_non_struct.stderr b/diesel_compile_tests/tests/ui/as_changeset_on_non_struct.stderr deleted file mode 100644 index 38ac2fbf8f3f..000000000000 --- a/diesel_compile_tests/tests/ui/as_changeset_on_non_struct.stderr +++ /dev/null @@ -1,23 +0,0 @@ -error: This derive can only be used on structs - --> $DIR/as_changeset_on_non_struct.rs:12:10 - | -12 | #[derive(AsChangeset)] - | ^^^^^^^^^^^ - | - = note: this error originates in a derive macro (in Nightly builds, run with -Z macro-backtrace for more info) - -error[E0601]: `main` function not found in crate `as_changeset_on_non_struct` - --> $DIR/as_changeset_on_non_struct.rs:1:1 - | -1 | / #[macro_use] -2 | | extern crate diesel; -3 | | -4 | | table! { -... | -13 | | #[table_name = "users"] -14 | | enum User {} - | |____________^ consider adding a `main` function to `$DIR/as_changeset_on_non_struct.rs` - -error: aborting due to 2 previous errors - -For more information about this error, try `rustc --explain E0601`. diff --git a/diesel_compile_tests/tests/ui/update-references.sh b/diesel_compile_tests/tests/ui/update-references.sh deleted file mode 100755 index c2c842fcc498..000000000000 --- a/diesel_compile_tests/tests/ui/update-references.sh +++ /dev/null @@ -1,48 +0,0 @@ -#!/usr/bin/env bash -# -# Copyright 2015 The Rust Project Developers. See the COPYRIGHT -# file at the top-level directory of this distribution and at -# http://rust-lang.org/COPYRIGHT. -# -# Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or -# http://www.apache.org/licenses/LICENSE-2.0> or the MIT license -# <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your -# option. This file may not be copied, modified, or distributed -# except according to those terms. - -# A script to update the references for particular tests. The idea is -# that you do a run, which will generate files in the build directory -# containing the (normalized) actual output of the compiler. This -# script will then copy that output and replace the "expected output" -# files. You can then commit the changes. -# -# If you find yourself manually editing a foo.stderr file, you're -# doing it wrong. - -if [[ "$1" == "--help" || "$1" == "-h" || "$1" == "" || "$2" == "" ]]; then - echo "usage: $0 <build-directory> <relative-path-to-rs-files>" - echo "" - echo "For example:" - echo " $0 ../../../build/x86_64-apple-darwin/test/ui *.rs */*.rs" -fi - -MYDIR=$(dirname $0) - -BUILD_DIR="$1" -shift - -while [[ "$1" != "" ]]; do - STDERR_NAME="${1/%.rs/.stderr}" - STDOUT_NAME="${1/%.rs/.stdout}" - shift - if [ -f $BUILD_DIR/$STDOUT_NAME ] && \ - ! (diff $BUILD_DIR/$STDOUT_NAME $MYDIR/$STDOUT_NAME >& /dev/null); then - echo updating $MYDIR/$STDOUT_NAME - cp $BUILD_DIR/$STDOUT_NAME $MYDIR/$STDOUT_NAME - fi - if [ -f $BUILD_DIR/$STDERR_NAME ] && \ - ! (diff $BUILD_DIR/$STDERR_NAME $MYDIR/$STDERR_NAME >& /dev/null); then - echo updating $MYDIR/$STDERR_NAME - cp $BUILD_DIR/$STDERR_NAME $MYDIR/$STDERR_NAME - fi -done