Commit graph

82 commits

Author SHA1 Message Date
Jan Böhmer
ec05f9d8ab Fixed phpstan issues 2026-04-15 23:27:10 +02:00
Wieland Schopohl
29db029d69
Add SI-prefix-aware sorting column for parts tableFeature/si value sort (#1344)
* Add SI-prefix-aware sorting column for the parts table

Adds an optional "Name (SI)" column that parses numeric values with SI
prefixes (p, n, u/µ, m, k/K, M, G, T) from part names and sorts by the
resulting physical value. This is useful for electronic components where
alphabetical sorting produces wrong results — e.g. 100nF, 10pF, 1uF
should sort as 10pF < 100nF < 1uF.

Implementation:
- New SiValueSort DQL function with platform-specific SQL generation
  for PostgreSQL (POSIX regex), MySQL/MariaDB (REGEXP_SUBSTR), and
  SQLite (PHP callback registered via the existing middleware).
- The regex is start-anchored: only names beginning with a number are
  matched. Part numbers like "MCP2515" or "Crystal 20MHz" are ignored.
- When SI sort is active, NATSORT is appended as a secondary sort so
  that non-matching parts fall back to natural string ordering instead
  of appearing in arbitrary order.
- The column is opt-in (not in default columns) and displays the parsed
  float value, or an empty cell for non-matching names.

* Rename SI column from "Name (SI)" to "SI Value"

The column now shows the parsed numeric value rather than the part name,
so the label should reflect that.

* Support comma as decimal separator in SI value parsing

Part names using European decimal notation (e.g. "4,7 kΩ", "2,2uF")
were parsed incorrectly because the regex only recognized dots. Now
commas are normalized to dots before parsing, matching the existing
pattern used elsewhere in the codebase (PartNormalizer, price providers).
2026-04-15 22:56:34 +02:00
Jan Böhmer
641c8388c1 Use xxh3 for generating hash keys instead of md5 as it offers better performance 2026-01-03 00:55:49 +01:00
Jan Böhmer
5dbe4ba00b Escape like pattern % and _ so that search containing these chars work like expected
This fixes issue #1075
2025-10-19 00:00:03 +02:00
Jan Böhmer
781ea45633 Removed ArrayType which is not necessary anymore with the new webauthn lib 2025-08-14 18:47:17 +02:00
Jan Böhmer
5c4aa11b4b Fixed problems with container injection into migrations
Some checks are pending
Build assets artifact / Build assets artifact (push) Waiting to run
Docker Image Build / docker (push) Waiting to run
Docker Image Build (FrankenPHP) / docker (push) Waiting to run
Static analysis / Static analysis (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.1, mysql) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.2, mysql) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.3, mysql) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.4, mysql) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.1, postgres) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.2, postgres) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.3, postgres) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.4, postgres) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.1, sqlite) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.2, sqlite) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.3, sqlite) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.4, sqlite) (push) Waiting to run
2025-07-12 23:39:26 +02:00
Jan Böhmer
1b86257836 Replaced the obsolete containerawareinterface with own implementation 2025-07-12 23:10:59 +02:00
Jan Böhmer
b3d8076ddf Fixed fixture loading process 2024-12-29 19:06:58 +01:00
Jan Böhmer
946032a101 Fixed phpstan analysis issues and bad code that showed up with phpstan 2.0 2024-12-28 23:08:08 +01:00
Jan Böhmer
e223078af9 Added a custom function to make PostgresSQL searches case insensitive
This is required only for postgres as every other database is case invariant by default. But to achieve a portable way, we implement it via a custom DQL function.

This fixes issue #784
2024-12-02 00:17:54 +01:00
Jan Böhmer
d6ff22fc44 Show in server info page which natural sorting method is used
This should ease debugging
2024-07-28 14:13:34 +02:00
Jan Böhmer
19e5d302f4 Fixed detection on mariadb natsort capabilities on distributions which use the 5.5.5- prefix for MariaDB version 2024-06-23 21:13:37 +02:00
Jan Böhmer
235d572f8c Use DatetimeImmutable instead of DateTime wherever possible 2024-06-22 17:36:54 +02:00
Jan Böhmer
20f32c7f12 Applied rector suggestions 2024-06-22 00:31:43 +02:00
Jan Böhmer
123372d93f Allow to emulate natural sort on mysql platforms 2024-06-18 21:42:00 +02:00
Jan Böhmer
272fe0516b Allow to emulate natural sorting on SQLite databases 2024-06-18 00:09:44 +02:00
Jan Böhmer
289c9126d0 Use Natural_SORT_KEY for natural sorting on MariaDB database which support that
This resolves issue #243 and #402
2024-06-17 23:29:38 +02:00
Jan Böhmer
0a482da93e Use postgres native array_position function instead of our FIELD function and pass it as array literal instead of variadic function
Otherwise we will run into errors, that we can not give more than 100 arguments to a function
2024-06-17 23:13:04 +02:00
Jan Böhmer
8bb8118d9f Use natural sorting for trees and others repository functions 2024-06-17 22:33:40 +02:00
Jan Böhmer
9db822eabd Use natural sorting for string datatables columns when using postgres
The natural sorting solution is quite portable, so this should be possible for other database types too later
2024-06-17 21:38:16 +02:00
Jan Böhmer
8a42dfa154 Use the FIELD function on postgres for order by field value 2024-06-17 21:20:23 +02:00
Jan Böhmer
4f75e2641b Define a custom FIELD function to sort tables by list of ids without the emulation via string operations 2024-06-16 23:46:40 +02:00
Jan Böhmer
6e9b337b49 Fixed regex function for postgres 2024-06-13 23:18:25 +02:00
Jan Böhmer
8ee3aaf4f4 Added Sqlite migrations required by new doctrine/orm version and fixed migration duplication for sqlite 2024-06-10 21:54:15 +02:00
Jan Böhmer
427b8659c9 Added MySQL migrations required by the doctrine upgrades
The new ORM versions, do not have anymore column comments, so these got removed
2024-06-10 21:43:25 +02:00
Jan Böhmer
d40ce470d3 Fixed some invalid class constant use in ResetAutoIncrementORMPurger 2024-06-10 21:25:51 +02:00
Jan Böhmer
fe732ecf45 Fixed minor inspection issue 2024-06-10 21:16:46 +02:00
Jan Böhmer
971bb92a8c Fixed error caused by ArrayType fields which is required by the webauthn bundle but was removed in doctrine/orm 4.0
We simple forward port the ArrayType class from orm 3.8 to fix this error
2024-06-10 21:11:11 +02:00
Jan Böhmer
4d927c5870 Use a better exception format for UTCDateTimeType 2024-06-10 20:17:57 +02:00
Jan Böhmer
bd640c19a4 Fixed type of token object is now a property instead of array value in Field2 2024-06-09 23:55:12 +02:00
Jan Böhmer
0d445b6a21 Fixed some minor inspection issues caused by the doctrine upgrades 2024-06-09 23:51:41 +02:00
Jan Böhmer
60325e797d Fixed the use of the removed ClassMetadataInfo constants 2024-06-09 23:45:22 +02:00
Jan Böhmer
7d9be5ae76 Fixed wrong casing of SQLitePlatform 2024-06-09 23:36:00 +02:00
Jan Böhmer
777bfed813 Fixed doctrine middlewares
We now look directly onto the driver arguments instead of retrieving a database platform, for which we would need the database version.

As we modify driver specific options there, this might be the better choice anyway
2024-06-09 23:28:46 +02:00
Jan Böhmer
43ca543651 Fixed wrong signature of UTCDateTimeType 2024-06-09 23:15:14 +02:00
Jan Böhmer
d202ecf06f Added support of the custom TinyInt type for postgres 2024-06-06 22:38:33 +02:00
Jan Böhmer
d49bb1f4b5 Removed unused import statements 2024-03-03 20:34:36 +01:00
Jan Böhmer
42e604245c Fixed some inspection issues 2024-03-03 19:57:31 +01:00
Jan Böhmer
3798217abc Use PDO constant instead of magic number in SetSQLModeMiddleware 2023-12-10 00:37:58 +01:00
Jan Böhmer
57423436ce Added options to use MySQL connection via SSL 2023-12-10 00:36:29 +01:00
Jan Böhmer
fdf52a59fe Fixed error in sqlite regex implementation in certain edge cases 2023-12-05 23:51:54 +01:00
Jan Böhmer
dd0f8ec97c Implement the SQLite extension for doctrine via a middleware instead of an deprecated event listener 2023-12-05 23:50:07 +01:00
Jan Böhmer
8b8079a6f1 Fixed deprecations 2023-12-05 21:55:20 +01:00
Jan Böhmer
5faeb5dd56 Fixed problem with loading Fixtures on MySQL in combination with savepoints
We must now load the fixtures using custom command partdb:fixtures:load
2023-12-05 21:33:29 +01:00
Jan Böhmer
de8a68c70d Expliticly declare a conversion from the custom TinyInt doctrine type to int
This hopefully fixes issue #434
2023-11-19 21:03:43 +01:00
Jan Böhmer
294f7cf005 Fixed some deprecations related to missing return types 2023-10-25 17:27:37 +02:00
Jan Böhmer
11be65678e Fixed order by FIELD emulation on sqlite via INSTR
We need to search for the comma token separators at both ends of the search term, otherwise the ordering will be wrong.
2023-07-29 17:06:35 +02:00
Jan Böhmer
80ed064cd6 Emulate the field function in SQLIte by using an string search, instead of our PHP function callback 2023-07-29 16:50:47 +02:00
Jan Böhmer
62b1e33616 Fixed field ordering on SQLite 2023-07-29 16:42:27 +02:00
Jan Böhmer
5c30210534 Fixed some stuff on the emulated Field2 function and added tests 2023-07-27 00:38:17 +02:00