I cannot seem to find a solution to this weird bug:
class Names(tag: Tag) extends Table[Name](tag, "NAME") with Identifiable[Name]{
def firstName = column[String]("firstName")
def lastName = column[String]("lastName")
def profileId = column[Int]("profileId")
def * = (id.?, firstName, lastName, profileId) <> ((Name.apply _).tupled, Name.unapply)
def profileFk = foreignKey("profile_fk", profileId, TableQuery[Profiles])(_.id, onDelete=ForeignKeyAction.Cascade)
}
class PhoneNumbers(tag: Tag) extends Table[PhoneNumber](tag, "PHONENUMBER") with Identifiable[PhoneNumber] {
def number = column[String]("number")
def kind = column[String]("kind")
def profileId = column[Int]("profileId")
def * = (id.?, number, kind, profileId) <> ((PhoneNumber.apply _).tupled, PhoneNumber.unapply)
def profileFk = foreignKey("profile_fk", profileId, TableQuery[Profiles])(_.id, onDelete=ForeignKeyAction.Cascade)
}
and the profile class consists of an id field only. Identifiable provides the id-property.
I am using Slick 3 with MySQL.
For Names a foreignKey to Profiles is generated, for PhoneNumbers not. Why? There seems to be no difference?
Update:
Here the relevant statements:
create table `PHONENUMBER` (`id` INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,`number` TEXT NOT NULL,`kind` TEXT NOT NULL,`profileId` INTEGER NOT NULL)
And:
alter table `PHONENUMBER` add constraint `profile_fk` foreign key(`profileId`) references `PROFILE`(`id`) on update NO ACTION on delete CASCADE
Complete Output:
create table PROFILE
(id
INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,userId
INTEGER NOT NULL)
create table VERSION
(id
INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,timestamp
INTEGER NOT NULL,vector
INTEGER NOT NULL)
create table NAME
(id
INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,firstName
TEXT NOT NULL,lastName
TEXT NOT NULL,profileId
INTEGER NOT NULL,versionId
INTEGER NOT NULL)
create table PHONENUMBER
(id
INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,number
TEXT NOT NULL,kind
TEXT NOT NULL,profileId
INTEGER NOT NULL,versionId
INTEGER NOT NULL)
create table VIEW
(id
INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY)
create table PHONENUMBERS_VIEWS
(phoneNumber
INTEGER NOT NULL,view
INTEGER NOT NULL)
create table CREDENTIALS
(id
INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,username
TEXT NOT NULL,password
TEXT NOT NULL,userId
INTEGER NOT NULL)
create table USER
(id
INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY)
create table API_KEY
(id
INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,token
TEXT NOT NULL,deviceId
TEXT NOT NULL,credentialsId
INTEGER NOT NULL)
alter table PROFILE
add constraint user_fk
foreign key(userId
) references USER
(id
) on update NO ACTION on delete NO ACTION
alter table NAME
add constraint profile_fk
foreign key(profileId
) references PROFILE
(id
) on update NO ACTION on delete CASCADE
alter table NAME
add constraint version_fk
foreign key(versionId
) references VERSION
(id
) on update NO ACTION on delete NO ACTION
alter table PHONENUMBER
add constraint profile_fk
foreign key(profileId
) references PROFILE
(id
) on update NO ACTION on delete CASCADE
alter table PHONENUMBER
add constraint version_fk
foreign key(versionId
) references VERSION
(id
) on update NO ACTION on delete NO ACTION
alter table PHONENUMBERS_VIEWS
add constraint phoneNumber_fk
foreign key(phoneNumber
) references PHONENUMBER
(id
) on update NO ACTION on delete NO ACTION
alter table PHONENUMBERS_VIEWS
add constraint view_fk
foreign key(view
) references VIEW
(id
) on update NO ACTION on delete NO ACTION
alter table CREDENTIALS
add constraint user_fk
foreign key(userId
) references USER
(id
) on update NO ACTION on delete NO ACTION
alter table API_KEY
add constraint credentials_fk
foreign key(credentialsId
) references CREDENTIALS
(id
) on update NO ACTION on delete NO ACTION
` symbol is hidden because of markdown, but there in the original output
EDIT 2:
val profiles = TableQuery[Profiles]
val names = TableQuery[Names]
val phoneNumbers = TableQuery[PhoneNumbers]
val views = TableQuery[Views]
val phoneNumbersToViews = TableQuery[PhoneNumbersToViews]
val users = TableQuery[Users]
val credentials = TableQuery[CredentialsSchema]
val apiKeys = TableQuery[ApiKeys]
val versions = TableQuery[Versions]
val schema = profiles.schema ++
versions.schema ++
names.schema ++
phoneNumbers.schema ++
views.schema ++
phoneNumbersToViews.schema ++
credentials.schema ++
users.schema ++
apiKeys.schema
SlickDB().run(DBIO.seq(
schema.create
))
schema.createStatements.foreach(println)