Re: wildcard Query
Re: wildcard Query
- Subject: Re: wildcard Query
- From: "Cheong Hee (Gmail)" <email@hidden>
- Date: Thu, 11 Nov 2010 11:16:18 +0800
I agreed that it had been better to have it all fetched from database with
right sql statement that filtering out and get the name with "*" .
Since the "*" is usually the control character used to fetch all data from
database, the name with "*" is quite an unusual case.
The other way is as some suggested either to change the "*" to something
else at accessor method and avoiding the "*" being stored. This should be
fine if database is all within own control. However, for existing database
that already has such name in the table, it may not be convenient to change
them at accessor method. The safest way to go i thought then will be grab
all the names (that your one fetch for all coud b used), and parsing them
through to grab the name with "*". Unless the records are too many.
Cheers
Cheong Hee
----- Original Message -----
From: "Mark Wardle" <email@hidden>
To: "Cheong Hee (Gmail)" <email@hidden>
Cc: "ISHIMOTO Ken" <email@hidden>; "WebObjects Development"
<email@hidden>
Sent: Thursday, November 11, 2010 5:37 AM
Subject: Re: wildcard Query
I think I'd do this with raw SQL.
I needed to execute raw SQL to optimise a particular query and fetch.
I also wishes to avoid a trip to the database for each individual
fetch - one to identify the PKs and then one to fetch each enterprise
object. Therefore, not finding anything in Wonder, I asked the mailing
list (http://osdir.com/ml/webobjects-dev/2010-02/msg00236.html) and
wrote this:
/**
* Executes a raw SQL statement returning an array of EOGlobalIDs.
* The raw SQL should return sufficient columns to allow the raw row
to be converted into an
* enterprise object.
* You will usually need to convert column names to attribute names
to allow the raw rows
* to be converted properly.
*
* @param ec - editing context
* @param entityName - name of the entity that the raw rows will be
converted to
* @param sql - the raw SQL statement to be executed
* @param columns - array of attribute names to replace the column
names that will arrive from the database
* @return
*/
public static NSArray<EOGlobalID> executeRawSql(EOEditingContext ec,
String entityName, String sql, NSArray<String> columns) {
EOModelGroup modelGroup = ERXEOAccessUtilities.modelGroup(ec);
EOEntity entity = modelGroup.entityNamed(entityName);
String modelName = entity.model().name();
NSArray<NSDictionary<?,?>> rawRows = EOUtilities.rawRowsForSQL(ec,
modelName, sql, columns);
NSMutableArray<EOGlobalID> gids = new
NSMutableArray<EOGlobalID>(rawRows.count());
for(NSDictionary<?,?> row : rawRows) {
EOGlobalID gid = entity.globalIDForRow(row);
if (gid==null) throw new NullPointerException("Could not fetch
global ID for raw row: " + row);
gids.add(gid);
}
return gids;
}
I then use ERXEOGlobalIDUtilities.fetchObjectsWithGlobalIDs to
convert all of this data into enterprise objects.
I'm sure this could all be optimised further, but it works and one
only has a single SELECT command issued against the database.
Best wishes,
Mark
On 10 November 2010 10:45, Cheong Hee (Gmail) <email@hidden> wrote:
Hi Ken
So sorry that I misunderstood your question. After spending some time,
I think this is what you need.
p = Pattern.compile("\\Q*\\E");
m = p.matcher(input);
if (m.find()) {
System.err.println("test starts" +
" with * signs...input: " + input);
}
But then the downside is you will have to enumerate each string one at a
time.
Cheers
Cheong Hee
----- Original Message -----
From: ISHIMOTO Ken
To: Farrukh Ijaz
Cc: WebObjects Development
Sent: Wednesday, November 10, 2010 5:44 PM
Subject: Re: wildcard Query
Hi Farrukh,
Sounds nice, I will take a look at that and give you feedback.
On 2010/11/10, at 10:09, Farrukh Ijaz wrote:
Hi Ken,
I spent some time exploring all the possibilities at the EOF level but it
looks like it does not work at the EOF level. I also inspected the
PostgresPlugin and found that the escape character is "|" instead of "\\"
but still it doesn't work. If your data is not very large, you can do
something like this.
create your own custom class for EOQualifierEvalution called
RegExpEvaluation as follows:
public static class RegExpEvaluation implements EOQualifierEvaluation {
String key, pattern;
public RegExpEvaluation(String key, String pattern) {
this.key = key;
this.pattern = pattern;
}
public boolean evaluateWithObject(Object obj) {
if (obj instanceof NSKeyValueCoding) {
Object value = ((NSKeyValueCoding) obj).valueForKey(key);
return (value instanceof String) && ((String) value).matches(pattern);
}
return false;
}
}
Fetch all the rows for the entity and using ERXArrayUtilities method as
follows:
EOFetchSpecification fs = new EOFetchSpecification(M_User.ENTITY_NAME,
null,
null);
NSArray<ArticleDetail> eoz =
session().defaultEditingContext().objectsWithFetchSpecification(fs);
eoz = ERXArrayUtilities.filteredArrayWithQualifierEvaluation(eoz, new
RegExpEvaluation(M_User.NAME, ".*\\*.*"));
Hope this may help.
Farrukh
On 2010-11-09, at 8:33 PM, ISHIMOTO Ken wrote:
No
On 2010/11/09, at 15:48, Farrukh Ijaz wrote:
Try using "*[*]*" and see it works?
Farrukh
Sent from my iPhone
On 2010-11-09, at 5:34 PM, ISHIMOTO Ken <email@hidden> wrote:
Hi everyone,
I am fighting with a Qualifier and my Question is "Is there any way for
query all Data with an in."
DataSample :
Mike
Chuck
Dav*id
Ken
Like code bellow but the "*" is a Wildcard and won't work.
EOQualifier qualifier = M_User.NAME.contains("*");
I would love to find any Record with "*".
Is there any trick or command to get all Objects with an "*" ?
Thank you
--------------------------------------------------------
K's ROOM (ISHIMOTO Ken)
--------------------------------------------------------
[E-Mail] <email@hidden>
[iChat:] <email@hidden>
[HP] http://www.ksroom.com/
_____________________________________________________________________
This e-mail has not been scanned for viruses because it was written on an
Mac,
and there are NO Viruses on an Apple Computer.
For further information visit http://www.apple.com
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden
________________________________
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden
--
Dr. Mark Wardle
Specialist registrar, Neurology
Cardiff, UK
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden