singlestore-labs / singlestoredb-laravel-driver

The official SingleStore Laravel driver.
https://github.com/singlestore-labs/singlestore-laravel-driver
Apache License 2.0
223 stars 22 forks source link

Add support for the "change"-function #39

Closed 4ice closed 1 month ago

4ice commented 1 year ago

It would be great if this feature was supported.

As I understand, the following would have to be done in order to change a field (This example changes a field called "name" from a varchar to text):

  1. Add a column of the desired type (ALTER TABLE table_name ADD COLUMN field2 TEXT CHARACTER SET utf8mb4 DEFAULT NULL COLLATE utf8mb4_unicode_ci; )
  2. Fill values in this column with the column you want to change the data type (UPDATE table_name SET name2 = name;)
  3. Remove the previous column (ALTER TABLE table_name DROP COLUMN name;)
  4. Change the name of the new column (ALTER TABLE table_name CHANGE name2 name;)

Would it be possible to implement this? Or is there already another way to do this?

carlsverre commented 1 year ago

Does Laravel have a change function already that works with other database backends or are you just suggesting that this pattern should be made into a nice function?

4ice commented 1 year ago

@carlsverre Yes, the function exists and works with other databases. I am migrating from mysql driver to singlestore, and I have several migrations that use the change()-function that I am working on rewriting as we speak.

carlsverre commented 1 year ago

Gotcha. This is a great feature request. Thank you!

sneycampos commented 1 year ago

Hi, any news about this issue/feature request?

JackEllis commented 1 year ago

@carlsverre I like this suggestion. Can this all be done in a single SQL DB transaction?

carlsverre commented 1 year ago

Unfortunately alter tables in SingleStore don't operate within user defined transactions. So it's not possible to perform this entire column change process atomically.

hafezdivandari commented 1 month ago

Is this issue still relevant? It's easy to implement this using the OP's workaround: adding, inserting, dropping, renaming.

hafezdivandari commented 1 month ago

You may check PR #88