Hi,

Let me explain how we evaluate the on condition with respect to the RDBMS
store. in the find() method location[1], all the condition expressions are
converted the RDBMS queries with SQL WHERE Clauses. But as per your
requirement instead of converted to WHERE Clause, it should be converted
to Regular Expression Operator.

ex:
SELECT 'Michael' WHERE age>24;

SELECT 'Michael' REGEXP '.*';

@Thisaru
We need to further check the feasibility of this, as this is a new feature.

[1] -
https://github.com/wso2-extensions/siddhi-store-rdbms/blob/master/component/src/main/java/org/wso2/extension/siddhi/store/rdbms/RDBMSEventTable.java#L438

Regards,
SajithD

On Thu, Aug 9, 2018 at 11:28 AM, Sajith Ariyarathna <sajit...@wso2.com>
wrote:

> Hi Nivethika,
>
> Have you tried
>
> on str:regexp(S.symbol, "WSO2(.*)")
>
> ?
>
> Thanks.
>
> On Thu, Aug 9, 2018 at 11:20 AM Niveathika Rajendran <niveath...@wso2.com>
> wrote:
>
>> Hi Sajith,
>>
>> The use case is when retrieving data from aggregations,
>>
>> from StockStream as S join TradeAggregation as T
>>   on S.symbol == T.symbol
>>   within "2014-02-15 00:00:00 +05:30", "2014-03-16 00:00:00 +05:30"
>>   per "days" select S.symbol, T.total, T.avgPrice insert into 
>> AggregateStockStream;
>>
>>
>> Here,  On condition equals should support a regex match, for instance,
>> S.symbol == "WSO2(.*)". As of now the equal operator only supports object
>> match[1].
>>
>> [1] https://github.com/wso2/siddhi/blob/master/modules/
>> siddhi-core/src/main/java/org/wso2/siddhi/core/executor/
>> condition/compare/equal/EqualCompareConditionExpressio
>> nExecutorStringString.java#L34
>>
>>
>> Best Regards,
>> *Niveathika Rajendran,*
>> *Software Engineer.*
>> *Mobile : +94 077 903 7536*
>>
>>
>>
>>
>>
>> On Thu, Aug 9, 2018 at 11:04 AM Thisaru Guruge <this...@wso2.com> wrote:
>>
>>> Here's my Siddhi Code:
>>>
>>> @App:name("IsAnalytics_Authentication_Aggregations")
>>> @App:description("Handle Event from IS and save data in a table for
>>> Overall Authentication")
>>>
>>> @source(type='inMemory', topic='IsAnalytics.Authentication.Common.
>>> OutputSinkFromProcessedAuthenticationDataStream',
>>> @map(type='passThrough'))
>>> define stream ProcessedAuthenticationDataStream (
>>>     meta_tenantId int,
>>>     eventId string,
>>>     username string,
>>>     localUsername string,
>>>     userStoreDomain string,
>>>     tenantDomain string,
>>>     remoteIp string,
>>>     region string,
>>>     inboundAuthType string,
>>>     serviceProvider string,
>>>     rememberMeEnabled bool,
>>>     forceAuthEnabled bool,
>>>     passiveAuthEnabled bool,
>>>     rolesCommaSeparated string,
>>>     authenticationStep string,
>>>     identityProvider string,
>>>     authStepSuccess bool,
>>>     stepAuthenticator string,
>>>     isFirstLogin bool,
>>>     successValue int,
>>>     failureValue int,
>>>     stepSuccessValue int,
>>>     firstLoginValue int,
>>>     identityProviderType string,
>>>     timestamp long
>>> );
>>>
>>> define stream PerUserRolesDuplicateEventStream (
>>>     meta_tenantId int,
>>>     eventId string,
>>>     username string,
>>>     localUsername string,
>>>     userStoreDomain string,
>>>     tenantDomain string,
>>>     remoteIp string,
>>>     region string,
>>>     inboundAuthType string,
>>>     serviceProvider string,
>>>     rememberMeEnabled bool,
>>>     forceAuthEnabled bool,
>>>     passiveAuthEnabled bool,
>>>     rolesCommaSeparated string,
>>>     authenticationStep string,
>>>     identityProvider string,
>>>     authStepSuccess bool,
>>>     stepAuthenticator string,
>>>     isFirstLogin bool,
>>>     successValue int,
>>>     failureValue int,
>>>     stepSuccessValue int,
>>>     firstLoginValue int,
>>>     identityProviderType string,
>>>     timestamp long,
>>>     token string
>>> );
>>>
>>> @store(type='rdbms', datasource='IS_ANALYTICS_DB')
>>> define aggregation RoleAggregation
>>> from PerUserRolesDuplicateEventStream
>>> select
>>>     meta_tenantId,
>>>     username,
>>>     serviceProvider,
>>>     identityProvider,
>>>     token as role,
>>>     remoteIp,
>>>     region,
>>>     userStoreDomain,
>>>     sum(successValue) as authSuccessCount,
>>>     sum(failureValue) as authFailureCount,
>>>     sum(stepSuccessValue) as authStepSuccessCount,
>>>     identityProviderType,
>>>     timestamp
>>> group by
>>>     meta_tenantId,
>>>     username,
>>>     serviceProvider,
>>>     token
>>> aggregate by timestamp every second ... year;
>>>
>>> @store(type='rdbms', datasource='IS_ANALYTICS_DB')
>>> define aggregation AuthenticationStatAggregation
>>> from ProcessedAuthenticationDataStream
>>> select
>>>     meta_tenantId,
>>>     username,
>>>     localUsername,
>>>     rolesCommaSeparated,
>>>     serviceProvider,
>>>     identityProvider,
>>>     remoteIp,
>>>     region,
>>>     userStoreDomain,
>>>     sum(successValue) as authSuccessCount,
>>>     sum(failureValue) as authFailureCount,
>>>     sum(stepSuccessValue) as authStepSuccessCount,
>>>     sum(firstLoginValue) as  authFirstSuccessCount,
>>>     identityProviderType,
>>>     timestamp
>>> group by
>>>     meta_tenantId,
>>>     username,
>>>     localUsername,
>>>     remoteIp,
>>>     rolesCommaSeparated
>>> aggregate by timestamp every second ... year;
>>>
>>> from ProcessedAuthenticationDataStream#str:tokenize(rolesCommaSeparated,
>>> ',')
>>> insert into PerUserRolesDuplicateEventStream;
>>>
>>> I have two aggregations, AuthenticationStatAggregation and the
>>> RoleAggregation. I need to retrieve aggregated data from the
>>> AuthenticationStatAggregation, based on the role.
>>>
>>> Issue with the "IN" operator is that if we have user roles like "Admin",
>>> "SystemAdmin", "LocalAdmin", etc., query will match "Admin" for all these
>>> entries. One way to overcome this is by storing them with a leading comma,
>>> and search for ",admin,".
>>>
>>> On Wed, Aug 8, 2018 at 5:26 PM Sajith Ariyarathna <sajit...@wso2.com>
>>> wrote:
>>>
>>>> Can you share your Siddhi code block here?
>>>>
>>>> I feel like what you have request here is similar to the functionality
>>>> of SQL IN operator, rather than a regex.
>>>>
>>>> Also, have you tried to use the regexp function [1]?
>>>>
>>>> [1] https://wso2-extensions.github.io/siddhi-execution-
>>>> string/api/4.0.19/#regexp-function
>>>>
>>>> Thanks.
>>>>
>>>> On Wed, Aug 8, 2018 at 5:16 PM Thisaru Guruge <this...@wso2.com> wrote:
>>>>
>>>>> Hi all,
>>>>>
>>>>> I have a use case where I need to retrieve data from an aggregation
>>>>> using regex.
>>>>>
>>>>> The exact scenario is that I have a comma separated string, where I
>>>>> need to retrieve data if one of the comma separated value is matching a
>>>>> string.
>>>>>
>>>>> I used String tokenizer to tokenize the comma separated values, but
>>>>> then it will create duplicate events, hence aggregate values can be
>>>>> misleading. If we can match regex this can be avoided.
>>>>>
>>>>> I had a discussion with @Niveathika Rajendran <niveath...@wso2.com> about
>>>>> the matter, and what I learnt is that the "on" clause in siddhi matches 
>>>>> the
>>>>> strings using "equals" function in Java, hence regex might not work.
>>>>>
>>>>> Can we enhance it to match regex ? Or is there any workaround for this
>>>>> ?
>>>>>
>>>>> As per my understanding, it will be a huge load in the front end, if
>>>>> we process this in the front-end side. Is it okay to process it in the
>>>>> front end?
>>>>>
>>>>> Please comment.
>>>>>
>>>>> --
>>>>> Thanks and Best Regards,
>>>>> Thisaru Guruge
>>>>> Software Engineer
>>>>> Mobile: +94 71 720 9720
>>>>>
>>>>>
>>>>> WSO2 Inc.: http://www.wso2.com
>>>>>
>>>>>
>>>>>
>>>>
>>>> --
>>>> Sajith Janaprasad Ariyarathna
>>>> Senior Software Engineer; WSO2, Inc.;  http://wso2.com/
>>>> <https://wso2.com/signature>
>>>>
>>>
>>>
>>> --
>>> Thanks and Best Regards,
>>> Thisaru Guruge
>>> Software Engineer
>>> Mobile: +94 71 720 9720
>>>
>>>
>>> WSO2 Inc.: http://www.wso2.com
>>>
>>>
>>>
>
> --
> Sajith Janaprasad Ariyarathna
> Senior Software Engineer; WSO2, Inc.;  http://wso2.com/
> <https://wso2.com/signature>
>



-- 
<http://wso2.com/signature>
Sajith Dimal
Software Engineer
Email : saji...@wso2.com
Mobile : +94783101496
WSO2 Inc. | http://wso2.com
lean.enterprise.middleware
_______________________________________________
Dev mailing list
Dev@wso2.org
http://wso2.org/cgi-bin/mailman/listinfo/dev

Reply via email to