[
https://issues.apache.org/jira/browse/CASSANDRA-8790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14318030#comment-14318030
]
Sylvain Lebresne commented on CASSANDRA-8790:
---------------------------------------------
bq. This isn't a problem, when your using the drivers - it is only when using
CQLSH.
Well, that's only partly true, it all depends on the language of the driver.
The point is that CQL string literals doe not have a notion of escape
characters/sequence (outside of escaping a single quote by doubling it). This
work with the java driver because java itself interprets the escape characters,
but if you try in C for instance, you'll be out of luck.
Now, maybe it would have been more convenient to have CQL literals understand
unicode escape sequence (and other standard sequence like \n, \t, etc..), but
we can't really change that today (it would be a breaking change). So I'm
personally not against adding a CQL function that escape characters for
convenience (but please let's not make it cqlsh specific as there is no reason
to).
bq. If you have an example of handling this via CQLSH on any OS, please share it
Well, pretty much any OS has support for
[IMEs|http://en.wikipedia.org/wiki/Input_method] (and it's not because it's a
non-printable character that it can't be inputed). Or, if you're fine passing
your queries to cqlsh through to a file (using the -f flag), then you can use
the wonderful vim editor that makes this [very
easy|http://vim.wikia.com/wiki/Entering_special_characters]. As said above, I'm
not against adding a convenience method for it, but it *is* possible regardless.
> Improve handling of non-printable unicode characters in text fields and CQLSH
> -----------------------------------------------------------------------------
>
> Key: CASSANDRA-8790
> URL: https://issues.apache.org/jira/browse/CASSANDRA-8790
> Project: Cassandra
> Issue Type: Improvement
> Reporter: Johnny Miller
> Priority: Minor
>
> Currently to store a string/text value that contains a non-printable unicode
> character and than subsequently be able to query it CQLSH I need to store the
> field as a blob via the blobAsText and textAsBlob functions.
> This is not really optimal - it would be better if CQLSH handled this rather
> than having to model data around this limitation.
> For example:
> {code:title=Example Code|borderStyle=solid}
> String createTableCql = "CREATE TABLE IF NOT EXISTS test_ks.testunicode (id
> blob PRIMARY KEY, inserted_on timestamp, lorem text)";
> session.execute(createTableCql);
> System.out.println("Table created.");
>
> String dimension1 = "state";
> String dimension2 = "card";
> String key = dimension1 + '\u001C' + dimension2;
> Date now = new Date();
> String lorem = "Lorem ipsum dolor sit amet.";
>
> String insertcql = "INSERT INTO testunicode (id, inserted_on, lorem) VALUES
> (textAsBlob(?), ?, ?)";
> PreparedStatement ps = session.prepare(insertcql);
> BoundStatement bs = new BoundStatement(ps);
> bs.bind(key, now, lorem);
> session.execute(bs);
> System.out.println("Row inserted with key "+key);
>
> String selectcql = "SELECT blobAsText(id) AS id, inserted_on, lorem FROM
> testunicode WHERE id = textAsBlob(?)";
> PreparedStatement ps2 = session.prepare(selectcql);
> BoundStatement bs2 = new BoundStatement(ps2);
> bs2.bind(key);
> ResultSet results = session.execute(bs2);
>
> System.out.println("Got results...");
>
> for (Row row : results) {
> System.out.println(String.format("%-30s\t%-20s\t%-20s",
> row.getString("id"), row.getDate("inserted_on"), row.getString("lorem")));
> }
> {code}
> And to query via CQLSH:
> {code}
> select * from testunicode where id = 0x73746174651c63617264 ;
> id | inserted_on | lorem
> ------------------------+--------------------------+-----------------------------
> 0x73746174651c63617264 | 2015-02-11 20:32:20+0000 | Lorem ipsum dolor sit
> amet.
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)