cassandra-migration icon indicating copy to clipboard operation
cassandra-migration copied to clipboard

Treat line breaks as whitespace

Open jansvajcr opened this issue 5 years ago • 3 comments

I have my .cql scripts written as following:

CREATE KEYSPACE IF NOT exists tagservice
WITH replication = ...

During migration on the startup, following exception is thrown:

Caused by: com.datastax.driver.core.exceptions.SyntaxError: line 1:45 missing K_WITH at 'replication' (...KEYSPACE IF NOT exists tagserviceWITH [replication] =...)

It looks like the line breaks are not treated as a separating whitespace. If those are manually added at the beginning of the line (spaces or tabs), the migration is performed succesfully.

jansvajcr avatar Sep 02 '19 12:09 jansvajcr

The problem root is obviously located in the MigrationRepository#readResourceFileAsString where the resource file (.cql) is read line by line using the BufferedReader#lines method which does not preserve line break characters. Therefore, adjacent lines are appended to the StringBuilder without any separating character.

jansvajcr avatar Sep 02 '19 15:09 jansvajcr

Hi,

that is correct, which is why the README says "The script format is rather simple. It allows one statement per line and lines should be finished with a ';' character." Currently this is intended by design ;-)

By the time I wrote the library the goal was to go for a rather simple solution that does not require sophisticated parsing of the input files. If you have any ideas how to solve this more elegant I am open for suggestions as I currently do not have much time to work on this (renovating a house next to the job) which is why I put my priorities on bug fixing and critical features that pop up.

Cheers Patrick

patka avatar Sep 02 '19 16:09 patka

Looking at the SimpleCQLLexer and seeing those cases for '\n' made me a bit confused. I thought it is already multiline-compatible. Thanks for your reply!

jansvajcr avatar Sep 02 '19 21:09 jansvajcr