Please test Nette Database 4.0 RC

David Grudl
Nette Core | 8206
+
+4
-

Please test the new major version of Nette Database 4.0 RC

composer require nette/database:^4.0.0-dev

The new version introduces a significant architectural change. It is no longer tightly coupled with PDO. This allows the addition of drivers for other PHP database extensions, such as mysqli, which will enable running queries in parallel—a potentially very interesting feature.

Another update is the merging of the Nette\Database\Connection and Explorer classes into one. This was how it used to be in NDB, and I think it's a good idea to return to this concept. The names of these classes are now aliases.

A new feature allows you to configure how values fetched from the database are converted, using the following options:

database:
	dsn: ...
	options:
		convertBoolean: true   # Converts MySQL tinyint(1) / BIT in SQLServer to boolean
		convertDateTime: true  # Whether to convert dates to DateTime objects
		convertDecimal: true   # Whether to convert to int/float or leave as string

All these options are enabled by default, as well as the newDateTime option.

Changes:

  • The getInsertId() method now returns integers instead of strings.
  • The DriverException::getCode() method returns a numeric driver-specific code instead of an SQLstate string.
  • I've removed the IRow and IRowContainer interfaces from the code as I believe they weren't particularly useful.
  • Methods strictly related to PDO have been deprecated: Connection::getPdo(), getDsn().

I've got a few exciting new features that require the new architecture of Nette Database 4.0.

And although the new version has been completely revamped under the hood, I've tried to ensure it doesn't cause any incompatibilities. I didn't need to make any changes to my projects. Please check if you encounter any incompatibilities so we can address them.

Is there anyone who has created their own database driver for NDB?

SamuelThorn
Member | 29
+
0
-

I've tried on one of my simple projects. Everything worked. Only problem was TypeError caused by conflict of Nette\Utils\DateTime and Nette\Database\DateTime, which was my mistake.