Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id B9B9F200B88 for ; Thu, 22 Sep 2016 15:31:22 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id B3F94160AD0; Thu, 22 Sep 2016 13:31:22 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 58B08160AAD for ; Thu, 22 Sep 2016 15:31:21 +0200 (CEST) Received: (qmail 34011 invoked by uid 500); 22 Sep 2016 13:31:19 -0000 Mailing-List: contact user-help@cassandra.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: user@cassandra.apache.org Delivered-To: mailing list user@cassandra.apache.org Received: (qmail 34001 invoked by uid 99); 22 Sep 2016 13:31:19 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd3-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 22 Sep 2016 13:31:19 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd3-us-west.apache.org (ASF Mail Server at spamd3-us-west.apache.org) with ESMTP id 6164318614C for ; Thu, 22 Sep 2016 13:31:19 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd3-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: 1.179 X-Spam-Level: * X-Spam-Status: No, score=1.179 tagged_above=-999 required=6.31 tests=[DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=2, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_PASS=-0.001] autolearn=disabled Authentication-Results: spamd3-us-west.apache.org (amavisd-new); dkim=pass (1024-bit key) header.d=jetbrains.com Received: from mx1-lw-us.apache.org ([10.40.0.8]) by localhost (spamd3-us-west.apache.org [10.40.0.10]) (amavisd-new, port 10024) with ESMTP id wqGGsl--zPIO for ; Thu, 22 Sep 2016 13:31:16 +0000 (UTC) Received: from mail-lf0-f50.google.com (mail-lf0-f50.google.com [209.85.215.50]) by mx1-lw-us.apache.org (ASF Mail Server at mx1-lw-us.apache.org) with ESMTPS id B70AA5F296 for ; Thu, 22 Sep 2016 13:31:15 +0000 (UTC) Received: by mail-lf0-f50.google.com with SMTP id b71so41039989lfg.0 for ; Thu, 22 Sep 2016 06:31:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jetbrains.com; s=googleapps; h=mime-version:subject:from:in-reply-to:date:cc:message-id:references :to; bh=rtvqS/Q3cKlqojsYcjHhAmXc/IQeLR++lgYG+1GqVH4=; b=awy2Qd23IUhMR9JfHaAqKS4rmB67ybQIC0YkLJ1VcrmYYwwyIW5gf2oRMP88QovWx4 9StSvpbiL2FkjqocEIiJnHgh8VAzzOpeU4RP5Nz5K6m95q3BwNj5dZN5h46fSAyqLR0E HJFXNM//EBL186MnBVa36pmOda2MpXKyHpSMY= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:subject:from:in-reply-to:date:cc :message-id:references:to; bh=rtvqS/Q3cKlqojsYcjHhAmXc/IQeLR++lgYG+1GqVH4=; b=Dtlr3IM4dHNtXsXwRUbGmGRv9TE6kCWCBxpSLvea0JUwyX0f2EL6HCkY7mWc0G6XzP IJpVKgHhIsYBBEoDhVom0VnDD3Ru5Bj835yflujAB6ITgCxKb6A1ZgtVVoOoM1eIj0GX jpIkIL+a4gzQSpeuX6l79MLvXvL6i98rJfcJbap5hWaSzi7qYu8CWOhajLrWl3Eqq4hi XJt60rJ6btUFxnilnJFV6sc0uBaH/4DstjUhbgVl6OwxafgYLP1mSqsdC4yXzYRroeNM AQimHdhRYA5q+WPEXyIaKAg6FJTEg66/KtB6wOj9yWUTqHDFcohEj23cmhJTf+mIEgOa b6pw== X-Gm-Message-State: AE9vXwO4MtpI9eKYiPTxGg5su8/k7Og/iULAZr+WDbvdD4gWMTTbbe4v2TyUZ8wOiIDqyGIr X-Received: by 10.25.211.199 with SMTP id k190mr913836lfg.71.1474551073811; Thu, 22 Sep 2016 06:31:13 -0700 (PDT) Received: from unit-734.labs.intellij.net ([80.76.244.114]) by smtp.gmail.com with ESMTPSA id g3sm357261lfe.14.2016.09.22.06.31.12 (version=TLS1 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 22 Sep 2016 06:31:13 -0700 (PDT) Content-Type: multipart/alternative; boundary="Apple-Mail=_B6D2F932-A756-4181-9EFF-4DD92C99213B" Mime-Version: 1.0 (Mac OS X Mail 9.3 \(3124\)) Subject: Re: How to query '%' character using LIKE operator in Cassandra 3.7? From: Mikhail Krupitskiy In-Reply-To: <19B587D0-8948-4827-BA75-69C12B502D27@jetbrains.com> Date: Thu, 22 Sep 2016 16:31:11 +0300 Cc: user@cassandra.apache.org, Maxim Podkolzine Message-Id: <87D5527C-C776-4BBD-8D42-161C984AAE84@jetbrains.com> References: <29C2FF18-468F-4313-9CC5-18F8FC52022E@jetbrains.com> <206221F8-72F9-4B7A-BF17-9BE7F7E30FF9@jetbrains.com> <19B587D0-8948-4827-BA75-69C12B502D27@jetbrains.com> To: DuyHai Doan X-Mailer: Apple Mail (2.3124) archived-at: Thu, 22 Sep 2016 13:31:22 -0000 --Apple-Mail=_B6D2F932-A756-4181-9EFF-4DD92C99213B Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 Hi! We=E2=80=99ve talked about two items: 1) =E2=80=98%=E2=80=99 as a wildcard in the middle of LIKE pattern. 2) How to escape =E2=80=98%=E2=80=99 to be able to find strings with the = =E2=80=98%=E2=80=99 char with help of LIKE. Item #1was resolved as CASSANDRA-12573. Regarding to item #2: you said the following: > A possible fix would be: >=20 > 1) convert the bytebuffer into plain String (UTF8 or ASCII, depending = on the column data type) > 2) remove the escape character e.g. before parsing OR use some = advanced regex to exclude the %% from parsing e.g >=20 > Step 2) is dead easy but step 1) is harder because I don't know if = converting the bytebuffer into String at this stage of the CQL parser is = expensive or not (in term of computation) >=20 > Let me try a patch=20 So is there any update on this? Thanks, Mikhail > On 20 Sep 2016, at 18:38, Mikhail Krupitskiy = wrote: >=20 > Hi! >=20 > Have you had a chance to try your patch or solve the issue in an other = way?=20 >=20 > Thanks, > Mikhail >> On 15 Sep 2016, at 16:02, DuyHai Doan > wrote: >>=20 >> Ok so I've found the source of the issue, it's pretty well hidden = because it is NOT in the SASI source code directly. >>=20 >> Here is the method where C* determines what kind of LIKE expression = you're using (LIKE_PREFIX , LIKE CONTAINS or LIKE_MATCHES) >>=20 >> = https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassand= ra/cql3/restrictions/SingleColumnRestriction.java#L733-L778 = >>=20 >> As you can see, it's pretty simple, maybe too simple. Indeed, they = forget to remove escape character BEFORE doing the matching so if your = search is LIKE '%%esc%', the detected expression is LIKE_CONTAINS. >>=20 >> A possible fix would be: >>=20 >> 1) convert the bytebuffer into plain String (UTF8 or ASCII, depending = on the column data type) >> 2) remove the escape character e.g. before parsing OR use some = advanced regex to exclude the %% from parsing e.g >>=20 >> Step 2) is dead easy but step 1) is harder because I don't know if = converting the bytebuffer into String at this stage of the CQL parser is = expensive or not (in term of computation) >>=20 >> Let me try a patch =20 >>=20 >>=20 >>=20 >> On Wed, Sep 14, 2016 at 9:42 AM, DuyHai Doan > wrote: >> Ok you're right, I get your point >>=20 >> LIKE '%%esc%' --> startWith('%esc') >>=20 >> LIKE 'escape%%' --> =3D 'escape%' >>=20 >> What I strongly suspect is that in the source code of SASI, we parse = the % xxx % expression BEFORE applying escape. That will explain the = observed behavior. E.g: >>=20 >> LIKE '%%esc%' parsed as %xxx% where xxx =3D %esc >>=20 >> LIKE 'escape%%' parsed as xxx% where xxx =3Descape% >>=20 >> Let me check in the source code and try to reproduce the issue >>=20 >>=20 >>=20 >> On Tue, Sep 13, 2016 at 7:24 PM, Mikhail Krupitskiy = > wrote: >> Looks like we have different understanding of what results are = expected. >> I based my understanding on = http://docs.datastax.com/en/cql/3.3/cql/cql_using/useSASIIndex.html = >> According to the doc =E2=80=98esc=E2=80=99 is a pattern for exact = match and I guess that there is no semantical difference between two = LIKE patterns (both of patterns should be treated as =E2=80=98exact = match'): =E2=80=98%%esc=E2=80=99 and =E2=80=98esc=E2=80=99. >>=20 >>> SELECT * FROM escape WHERE val LIKE '%%esc%'; --> Give all results = containing '%esc' so %escapeme is a possible match and also escape%esc >> Why =E2=80=98containing=E2=80=99? I expect that it should be = =E2=80=99starting=E2=80=99.. >>>=20 >>> SELECT * FROM escape WHERE val LIKE 'escape%%' --> Give all results = starting with 'escape%' so escape%me is a valid result and also = escape%esc >> Why =E2=80=99starting=E2=80=99? I expect that it should be =E2=80=98exa= ct matching=E2=80=99. >>=20 >> Also I expect that =E2=80=9C LIKE =E2=80=98%s%sc%=E2=80=99 =E2=80=9D = will return =E2=80=98escape%esc=E2=80=99 but it returns nothing = (CASSANDRA-12573). >>=20 >> What I=E2=80=99m missing? >>=20 >> Thanks, >> Mikhail >>=20 >>> On 13 Sep 2016, at 19:31, DuyHai Doan > wrote: >>>=20 >>> CREATE CUSTOM INDEX ON test.escape(val) USING = 'org.apache.cassandra.index.sa = si.SASIIndex' WITH OPTIONS =3D = {'mode': 'CONTAINS', 'analyzer_class': 'org.apache.cassandra.index.sa = si.analyzer.NonTokenizingAnalyzer',= 'case_sensitive': 'false'}; >>>=20 >>> I don't see any problem in the results you got >>>=20 >>> SELECT * FROM escape WHERE val LIKE '%%esc%'; --> Give all results = containing '%esc' so %escapeme is a possible match and also escape%esc >> Why =E2=80=98containing=E2=80=99? I expect that it should be = =E2=80=99starting=E2=80=99.. >>>=20 >>> SELECT * FROM escape WHERE val LIKE 'escape%%' --> Give all results = starting with 'escape%' so escape%me is a valid result and also = escape%esc >> Why =E2=80=99starting=E2=80=99? I expect that it should be =E2=80=98exa= ct matching=E2=80=99. >>=20 >>>=20 >>> On Tue, Sep 13, 2016 at 5:58 PM, Mikhail Krupitskiy = > wrote: >>> Thanks for the reply. >>> Could you please provide what index definition did you use? >>> With the index from my script I get the following results: >>>=20 >>> cqlsh:test> select * from escape; >>>=20 >>> id | val >>> ----+----------- >>> 1 | %escapeme >>> 2 | escape%me >>> 3 | escape%esc >>>=20 >>> Contains search >>>=20 >>> cqlsh:test> SELECT * FROM escape WHERE val LIKE '%%esc%'; >>>=20 >>> id | val >>> ----+----------- >>> 1 | %escapeme >>> 3 | escape%esc >>> (2 rows) >>>=20 >>>=20 >>> Prefix search >>>=20 >>> cqlsh:test> SELECT * FROM escape WHERE val LIKE 'escape%%'; >>>=20 >>> id | val >>> ----+----------- >>> 2 | escape%me >>> 3 | escape%esc >>>=20 >>> Thanks, >>> Mikhail=20 >>>=20 >>>> On 13 Sep 2016, at 18:16, DuyHai Doan > wrote: >>>>=20 >>>> Use % to escape % >>>>=20 >>>> cqlsh:test> select * from escape; >>>>=20 >>>> id | val >>>> ----+----------- >>>> 1 | %escapeme >>>> 2 | escape%me >>>>=20 >>>>=20 >>>> Contains search >>>>=20 >>>> cqlsh:test> SELECT * FROM escape WHERE val LIKE '%%esc%'; >>>>=20 >>>> id | val >>>> ----+----------- >>>> 1 | %escapeme >>>>=20 >>>> (1 rows) >>>>=20 >>>>=20 >>>> Prefix search >>>>=20 >>>> cqlsh:test> SELECT * FROM escape WHERE val LIKE 'escape%%'; >>>>=20 >>>> id | val >>>> ----+----------- >>>> 2 | escape%me >>>>=20 >>>> On Tue, Sep 13, 2016 at 5:06 PM, Mikhail Krupitskiy = > wrote: >>>> Hi Cassandra guys, >>>>=20 >>>> I use Cassandra 3.7 and wondering how to use =E2=80=98%=E2=80=99 as = a simple char in a search pattern. >>>> Here is my test script: >>>>=20 >>>> DROP keyspace if exists kmv; >>>> CREATE keyspace if not exists kmv WITH REPLICATION =3D { 'class' : = 'SimpleStrategy', 'replication_factor':'1'} ; >>>> USE kmv; >>>> CREATE TABLE if not exists kmv (id int, c1 text, c2 text, PRIMARY = KEY(id, c1)); >>>> CREATE CUSTOM INDEX ON kmv.kmv ( c2 ) USING = 'org.apache.cassandra.index.sa = si.SASIIndex' WITH OPTIONS =3D { >>>> 'analyzed' : 'true', >>>> 'analyzer_class' : 'org.apache.cassandra.index.sa = si.analyzer.NonTokenizingAnalyzer',= >>>> 'case_sensitive' : 'false', >>>> 'mode' : 'CONTAINS' >>>> }; >>>>=20 >>>> INSERT into kmv (id, c1, c2) values (1, 'f22', 'qwe%asd'); >>>> INSERT into kmv (id, c1, c2) values (2, 'f22', '%asd'); >>>> INSERT into kmv (id, c1, c2) values (3, 'f22', 'asd%'); >>>> INSERT into kmv (id, c1, c2) values (4, 'f22', 'asd%1'); >>>> INSERT into kmv (id, c1, c2) values (5, 'f22', 'qweasd'); >>>>=20 >>>> SELECT c2 from kmv.kmv where c2 like =E2=80=98_pattern_'; >>>>=20 >>>> _pattern_ '%%%' finds all columns that contain %. >>>> How to find columns that start form =E2=80=98%=E2=80=99 or = =E2=80=98%a=E2=80=99? >>>> How to find columns that end with =E2=80=98%=E2=80=99? >>>> What about more complex patterns: '%qwe%a%sd%=E2=80=99? How to = differentiate =E2=80=98%=E2=80=99 char form % as a command symbol? (Also = there is a related issue CASSANDRA-12573). >>>>=20 >>>>=20 >>>> Thanks, >>>> Mikhail >>>>=20 >>>=20 >>>=20 >>=20 >>=20 >>=20 >=20 --Apple-Mail=_B6D2F932-A756-4181-9EFF-4DD92C99213B Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=utf-8 Hi!

We=E2=80= =99ve talked about two items:
1) =E2=80=98%=E2=80=99 = as a wildcard in the middle of LIKE pattern.
2) How = to escape =E2=80=98%=E2=80=99 to be able to find strings with the = =E2=80=98%=E2=80=99 char with help of LIKE.

Item #1was resolved as = CASSANDRA-12573.

Regarding to item #2: you said the following:
A possible fix would be:

1) convert the bytebuffer into plain String = (UTF8 or ASCII, depending on the column data type)
2) remove the = escape character e.g. before parsing OR use some advanced regex to = exclude the %% from parsing e.g

Step 2) is dead = easy but step 1) is harder because I don't know if converting the = bytebuffer into String at this stage of the CQL parser is expensive or = not (in term of computation)

Let me try a = patch 
<= div class=3D"">So is there any update on this?

Thanks,
Mikhail


On 20 Sep 2016, at 18:38, Mikhail Krupitskiy <mikhail.krupitskiy@jetbrains.com> wrote:

Hi!

Have you had a chance to = try your patch or solve the issue in an other way? 

Thanks,
Mikhail
On 15 Sep 2016, at 16:02, DuyHai Doan <doanduyhai@gmail.com> wrote:

Ok so I've found the source of the issue, it's pretty well = hidden because it is NOT in the SASI source code directly.

Here is the method where = C* determines what kind of LIKE expression you're using (LIKE_PREFIX , = LIKE CONTAINS or LIKE_MATCHES)


As you can see, it's pretty simple, maybe too simple. Indeed, = they forget to remove escape character BEFORE doing the matching so if = your search is LIKE = '%%esc%', the detected expression is LIKE_CONTAINS.

A possible fix would be:

1) convert the = bytebuffer into plain String (UTF8 or ASCII, depending on the column = data type)
2) remove the escape character e.g. before parsing OR use = some advanced regex to exclude the %% from parsing e.g

Step 2) is dead easy but step 1) is harder because I don't = know if converting the bytebuffer into String at this stage of the CQL = parser is expensive or not (in term of computation)

Let me try a patch  



On Wed, Sep 14, 2016 at 9:42 AM, = DuyHai Doan <doanduyhai@gmail.com> wrote:
Ok you're right, I get your point

LIKE '%%esc%' --> = startWith('%esc')

LIKE 'escape%%' -->  =3D 'escape%'

What I strongly suspect = is that in the source code of SASI, we parse the % xxx % expression = BEFORE applying escape. That will explain the observed behavior. = E.g:

LIKE = '%%esc%'  parsed as %xxx% where xxx =3D %esc

LIKE 'escape%%' parsed = as xxx% where xxx =3Descape%

Let me check in the source code and try = to reproduce the issue



On Tue, Sep 13, 2016 at 7:24 PM, Mikhail = Krupitskiy <mikhail.krupitskiy@jetbrains.com>= wrote:
Looks like we = have different understanding of what results are expected.
According to the doc = =E2=80=98esc=E2=80=99 is a pattern for exact match and I guess that = there is no semantical difference between two LIKE patterns (both of = patterns should be treated as =E2=80=98exact match'): =E2=80=98%%esc=E2=80= =99 and =E2=80=98esc=E2=80=99.

SELECT * FROM = escape WHERE val LIKE '%%esc%'; --> Give all results containing '%esc' so %escapeme is a possible match and also escape%esc
Why =E2=80=98containing=E2=80=99= ? I expect that it should be =E2=80=99starting=E2=80=99..

SELECT * FROM = escape WHERE val LIKE 'escape%%' --> Give all results starting with 'escape%' so escape%me is a valid result and also escape%esc
Why =E2=80=99starting=E2=80=99?= I expect that it should be =E2=80=98exact matching=E2=80=99.
<= div class=3D"">
Also I expect that = =E2=80=9C LIKE =E2=80=98%s%sc%=E2=80=99 =E2=80=9D will return = =E2=80=98escape%esc=E2=80=99 but it returns nothing = (CASSANDRA-12573).

What I=E2=80=99m missing?

Thanks,
Mikhail

On 13 Sep 2016, at 19:31, DuyHai Doan <doanduyhai@gmail.com> wrote:

CREATE CUSTOM INDEX ON = test.escape(val) USING 'org.apache.cassandra.index.sasi.SASIIndex' = WITH OPTIONS =3D {'mode': 'CONTAINS', 'analyzer_class': 'org.apache.cassandra.index.sasi.analyzer.NonTokenizingAnalyzer', = 'case_sensitive': 'false'};

I don't see any problem in the results = you got

SELECT * FROM = escape WHERE val LIKE '%%esc%'; --> Give all results containing '%esc' so %escapeme is a possible match and also escape%esc
Why =E2=80=98containing=E2= =80=99? I expect that it should be =E2=80=99starting=E2=80=99..

SELECT * FROM = escape WHERE val LIKE 'escape%%' --> Give all results starting with 'escape%' so escape%me is a valid result and also escape%esc
Why =E2=80=99starting=E2=80= =99? I expect that it should be =E2=80=98exact matching=E2=80=99.


On Tue, Sep 13, 2016 at 5:58 PM, Mikhail = Krupitskiy <mikhail.krupitskiy@jetbrains.com>= wrote:
Thanks for the reply.
Could you please provide what index definition did you = use?
With the index from my script I get the = following results:

cqlsh:test> select * from escape;

 id | val
----+-----------  1 | %escapeme
  2 | escape%me
  3 | escape%esc

Contains search
cqlsh:test> SELECT * FROM escape WHERE val LIKE = '%%esc%';

 id | val
----+-----------
  1 | %escapeme
  3 | escape%esc
(2 rows)


Prefix search

cqlsh:test> = SELECT * FROM escape WHERE val LIKE 'escape%%';

 id | val
----+-----------
  2 | escape%me
  3 | escape%esc

Thanks,
Mikhail 

On 13 Sep 2016, at 18:16, DuyHai Doan <doanduyhai@gmail.com> wrote:

Use % to escape %

cqlsh:test> select * from escape;

 id | val
----+-----------
  1 | = %escapeme
  2 | escape%me


Contains search

cqlsh:test> SELECT * FROM escape WHERE val = LIKE '%%esc%';

 id | val
----+-----------
  1 | %escapeme

(1 rows)


Prefix search

cqlsh:test> SELECT * FROM escape WHERE val LIKE = 'escape%%';

 id | val
----+-----------
  2 | escape%me

On Tue, = Sep 13, 2016 at 5:06 PM, Mikhail Krupitskiy <mikhail.krupitskiy@jetbrains.com> wrote:
Hi Cassandra guys,

I use Cassandra 3.7 and wondering how to use =E2=80=98%=E2=80=99 as a = simple char in a search pattern.
Here is my test script:

DROP keyspace if exists kmv;
CREATE keyspace if not exists kmv WITH REPLICATION =3D { 'class' : = 'SimpleStrategy', 'replication_factor':'1'} ;
USE kmv;
CREATE TABLE if not exists kmv (id int, c1 text, c2 text, PRIMARY = KEY(id, c1));
CREATE CUSTOM INDEX ON kmv.kmv  ( c2 ) USING 'org.apache.cassandra.index.sasi.SASIIndex' = WITH OPTIONS =3D {
'analyzed' : 'true',
'analyzer_class' : 'org.apache.cassandra.index.sasi.analyzer.NonTokenizingAnalyzer',
'case_sensitive' : 'false',
'mode' : 'CONTAINS'
};

INSERT into kmv (id, c1, c2) values (1, 'f22', 'qwe%asd');
INSERT into kmv (id, c1, c2) values (2, 'f22', '%asd');
INSERT into kmv (id, c1, c2) values (3, 'f22', 'asd%');
INSERT into kmv (id, c1, c2) values (4, 'f22', 'asd%1');
INSERT into kmv (id, c1, c2) values (5, 'f22', 'qweasd');

SELECT c2 from kmv.kmv where c2 like =E2=80=98_pattern_';

_pattern_ '%%%' finds all columns that contain %.
How to find columns that start form =E2=80=98%=E2=80=99 or =E2=80=98%a=E2=80= =99?
How to find columns that end with =E2=80=98%=E2=80=99?
What about more complex patterns: '%qwe%a%sd%=E2=80=99? How to = differentiate =E2=80=98%=E2=80=99 char form % as a command symbol? (Also = there is a related issue CASSANDRA-12573).


Thanks,
Mikhail








= --Apple-Mail=_B6D2F932-A756-4181-9EFF-4DD92C99213B--