mysql - FlywayDB: Migration fails with "Error executing statement", but manually running migration SQL code works -


i have play framework 2.2.2 scala application , use play-flyway 1.0.3.

the following migration should run flyway:

alter table  `user_visits` add  `firstsiterequesttime` datetime not null ; update `user_visits` set `firstsiterequesttime`=(select `time` `user_siterequests` `user_siterequests`.`visit`=`user_visits`.`id` order `time` asc limit 1) ; 

so add column table , programatically fill using update statement.

the first line executes fine, update statemens fails with

flywaysqlscriptexception: error executing statement @ line 2: update `user_visits` set `firstsiterequesttime`=(select `time` `user_siterequests` `user_siterequests`.`visit`=`user_visits`.`id` order `time` asc limit 1) com.googlecode.flyway.core.command.flywaysqlscriptexception: error executing statement @ line 2: update `user_visits` set `firstsiterequesttime`=(select `time` `user_siterequests` `user_siterequests`.`visit`=`user_visits`.`id` order `time` asc limit 1) com.googlecode.flyway.core.dbsupport.sqlscript.execute(sqlscript.java:92) com.googlecode.flyway.core.resolver.sql.sqlmigrationexecutor.execute(sqlmigrationexecutor.java:72) com.googlecode.flyway.core.command.dbmigrate$2.dointransaction(dbmigrate.java:243) com.googlecode.flyway.core.command.dbmigrate$2.dointransaction(dbmigrate.java:241) com.googlecode.flyway.core.util.jdbc.transactiontemplate.execute(transactiontemplate.java:72) 

however, when take migration sql code , run using phpmyadmin, works fine (although takes 2-5 seconds run, tables quite big).

my mysql.log looks like

                  128 query set autocommit=0                   128 query alter table  `user_visits` add  `firstsiterequesttime` datetime not null 140412  4:40:43   128 query update `user_visits` set `firstsiterequesttime`=(select `time` `user_siterequests` `user_siterequests`.`visit`=`user_visits`.`id` order `time` asc limit 1) 140412  4:40:44   128 query rollback                   128 query set autocommit=1 

is flyway having kind of timeout? log file shows sends query mysql server rolls back. why? stated before, query correct. works when run manually.

edit:

after running migration, alter table statement executed , committed (the table altered), although mysql.log says rolled back. second command rolled back.

i tried splitting 2 sql commands in 2 migrations. first 1 (alter table) runs fine , second 1 fails.

edit2:

it might kind of timeout problem. making execute faster (by updating of rows)

alter table  `user_visits` add  `firstsiterequesttime` datetime not null ; update `user_visits` set `firstsiterequesttime`=(select `time` `user_siterequests` `user_siterequests`.`visit`=`user_visits`.`id` order `time` asc limit 1) user_visits.id<1000; 

runs correctly, in flyway.

mysql documentation says of mysql 5.5.3, "most statements" cause implicit commit before executing after executing. seems include alter table statement (in mysql 5.5.3 , later).

notice in log shown in question, autocommit disable. sure, either use explicit commit between statements this:

alter table  `user_visits` add  `firstsiterequesttime` datetime not null ; commit ; update `user_visits` set `firstsiterequesttime`=(select `time` `user_siterequests` `user_siterequests`.`visit`=`user_visits`.`id` order `time` asc limit 1) ; 

or place them in separate , contiguous migration files, this:

file v1__alter_table.sql:

alter table  `user_visits` add  `firstsiterequesttime` datetime not null ; 

file v2__update_table.sql:

update `user_visits` set `firstsiterequesttime`=(select `time` `user_siterequests` `user_siterequests`.`visit`=`user_visits`.`id` order `time` asc limit 1) ; 

Comments

Popular posts from this blog

apache - Remove .php and add trailing slash in url using htaccess not loading css -

javascript - jQuery show full size image on click -