Uploaded image for project: 'Apache Cassandra'
  1. Apache Cassandra
  2. CASSANDRA-8790

Improve handling of escape sequence for CQL string literals

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Open
    • Low
    • Resolution: Unresolved
    • None
    • Legacy/CQL
    • None

    Description

      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:

      Example Code
      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")));
      }
      
      

      And to query via CQLSH:

      select * from testunicode where id = 0x73746174651c63617264 ;
      
       id                     | inserted_on              | lorem
      ------------------------+--------------------------+-----------------------------
       0x73746174651c63617264 | 2015-02-11 20:32:20+0000 | Lorem ipsum dolor sit amet.
      

      Attachments

        Issue Links

          Activity

            People

              Unassigned Unassigned
              johnny15676 Johnny Miller
              Votes:
              2 Vote for this issue
              Watchers:
              8 Start watching this issue

              Dates

                Created:
                Updated: