* test: skip DB-specific tests using new unimplemented_for decorator
* test: use unimplemented to skip tests with implementation problems
* test: update unimplemented to consider multi-DBs
* test: skip test_unbuffered_cursor using unimplemented for pg and sqlite
* test: update unimplemented wrapper
When navigating from desktop -> list view -> back to desktop,
the setup_awesomebar() was called again via on_page_show,
creating multiple AwesomeBar instances with their own modals
and event listeners.
Added a guard to ensure setup_awesomebar() only runs once per
DesktopPage instance.
Fixes#34923
- Store field_obj reference instead of deep cloning control in frappe._from_link
- Route back to original form before setting value (fixes self-linking doctype case)
- Move _add event trigger to set_model_value() for reliable event firing
- Add Table MultiSelect support in update_calling_link validation
- Remove unused deep_clone utility from frappe.utils
- Move validation from parse to validate method for proper flow
- Trigger row_add event only after successful validation
- Clear input field when validation fails
- Fix parse method signature in link control
Adjust to use `ON CONFLICT` in a similar manner as the others
```
File "apps/frappe/frappe/model/rename_doc.py", line 192, in rename_doc
update_user_settings(old, new, link_fields)
~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "apps/frappe/frappe/model/rename_doc.py", line 276, in update_user_settings
sync_user_settings()
~~~~~~~~~~~~~~~~~~^^
File "apps/frappe/frappe/model/utils/user_settings.py", line 52, in sync_user_settings
frappe.db.multisql(
^^^^^^^^^^^^^^^^^^^
...<12 lines>...
as_dict=1,
File "apps/frappe/frappe/database/database.py", line 1416, in multisql
return self.sql(query, values, **kwargs)
~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^
File "apps/frappe/frappe/database/sqlite/database.py", line 454, in sql
return super().sql(*args, **kwargs)
~~~~~~~~~~~^^^^^^^^^^^^^^^^^
File "apps/frappe/frappe/database/database.py", line 272, in sql
self.execute_query(query, values)
~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^
File "apps/frappe/frappe/database/sqlite/database.py", line 443, in execute_query
return self._cursor.execute(query, values or ())
~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 3, and there are 4 supplied.
```
Signed-off-by: Akhil Narang <me@akhilnarang.dev>