Prosím o otestování Nette Database 4.0 RC

David Grudl
Nette Core | 8199
+
+6
-

Prosím o otestování nové velké verze Nette Database 4.0 RC

composer require nette/database:^4.0.0-dev

Nová verze představuje především velkou architektonickou změnu. Není už pevně spojená s PDO. A je možné doplnit drivery pro další databázové rozšíření v PHP. Například mysqli, které přinese možnost spouštět dotazy paralelně, což může být hodně zajímavé.

Další novinkou je spojení tříd Nette\Database\Connection a Explorer do jedné. Ono to tak kdysi v NDB bylo a myslím, že je dobré se k tomuto konceptu vrátit. Názvy těchto tříd jsou nyní aliasy.

Novinkou je možnost konfigurovat, jak se převádí hodnoty načtené z databáze, a to pomocí

database:
	dsn: ...
	options:
		convertBoolean: true   # MySQL tinyint(1) / BIT v SQLServer převádí na boolean
		convertDateTime: true  # zda převádět data na objekty DateTime
		convertDecimal: true   # zda převádet na int/float nebo ponechat string
		newDateTime: true      # používá Nette\Database\DateTime místo Nette\Utils\DateTime

Všechny tyto volby jsou zapnuté by default, stejně jako volba newDateTime.

Změny:

  • Metoda getInsertId() nyní vrací integery místo řetězců
  • Metoda DriverException::getCode() vrací číselný driver-specific kód místo řetězce SQLstate
  • Z kódu jsem dal pryč rozhraní IRow a IRowContainer, které imho k ničemu užitečnému nebyly
  • Deprecated jsou metody poplatné čistě PDO: Connection::getPdo()getDsn()

Mám připravených pár bombastických novinek, které vyžadují novou architekturu Nette Database 4.0

A ačkoliv je nová verze pod kapotou kompletně předělaná, snažil jsem se, aby nezpůsobovala žádné nekompatibility. Na svých projektech jsem nepotřeboval cokoliv upravovat. Tak prosím ověřte, jestli na nějaké nekompatibility nenarazíte, ať je můžeme vychytat.

Je to někdo, kdo si vytvářel pro NDB vlastní databázový driver?

kminekmatej
Generous Backer | 37
+
0
-

Ahoj,
já mám ve svém projektu definován přístup ke dvěma databázím a po přepnutí na DB4 mi nejde vybuildit container. Error log: https://cloud.kminet.eu/…9TmJDBpRMKjD . Config db vypadá takto:

database:
    default:
        dsn: 'mysql:host=localhost;dbname=admin.boost.space'
        user: dbuser
        password: 'dbpwd'
    b:
        dsn: 'mysql:host=localhost;dbname=boost.space'
        user: dbuser
        password: 'dbpwd'
        reflection: conventional

nightfish
Člen | 505
+
+3
-

@kminekmatej Podle kódu NDB verze 3.2 to vypadá, že reflection: bylo v průběhu času nahrazeno za conventions: a drženo jen z důvodu zpětné kompatibility – viz kód.
Pokud čtu kód správně, mohlo by stačit nahradit reflection: conventional za conventions: Static.

ViPEr*CZ*
Člen | 817
+
0
-

Zkousim na jedne mensi appce.

Dostavam se na

Argument #1 ($dateTime) must be of type Nette\Utils\DateTime, Nette\Database\DateTime

Coz jsem teda vyresil asi na dvou mistech. Asi muze byt opruz kdyz to je na vice mistech.
Ale melo by to jit resit strojove.

Jen jsem to chtel rovnou checknout na PHP 8.4 a koukam, ze mame za-lockovano
nette/routing v3.1.0 requires php 8.1 – 8.3 → your php version (8.4.0beta4) does not satisfy that requirement

Na 8.3.11 to frci :-)