⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 likeexpression.java

📁 JoSQL 1.5的源代码。JoSQL(SQL for Java Objects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java
💻 JAVA
字号:
/* * Copyright 2004-2005 Gary Bentley  *  * Licensed under the Apache License, Version 2.0 (the "License"); you may  * not use this file except in compliance with the License.  * You may obtain a copy of the License at  *    http://www.apache.org/licenses/LICENSE-2.0  * * Unless required by applicable law or agreed to in writing, software  * distributed under the License is distributed on an "AS IS" BASIS,  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  * See the License for the specific language governing permissions and  * limitations under the License. */package org.josql.expressions;import java.util.List;import java.util.ArrayList;import java.util.StringTokenizer;import org.josql.Query;import org.josql.QueryExecutionException;import org.josql.QueryParseException;import org.josql.internal.Utilities;/** * Represents a LHS [ NOT ] [ $ ] LIKE RHS expression. * It should be noted that unlike "normal" SQL the "." character is not supported since in * practice it tends to be redundant. * <p> * It is possible to use: $ in front of the "LIKE" to indicate that a case insensitive  * comparison should be performed, for example: * <pre> *   SELECT * *   FROM   java.lang.String *   WHERE  toString $LIKE '%value' * </pre> * <p> * Also, the LHS or RHS can be built up using the "+" operator to concatenate a string, thus: * <pre> *   SELECT * *   FROM   java.lang.String *   WHREE  toString $LIKE '%' + :myValue * </pre> * <p> * In this way (using the {@link BindVariable named bind variable}) you don't have to provide * the wildcard. * <p> * It is also possible to specify your own "wildcard" character in the Query object using: * {@link Query#setWildcardCharacter(char)}. * <p> * Note: the implementation is a modified version of that provided by: Kevin Stannard  * (http://www.jzoo.com/java/wildcardfilter/). * <p> *  Last Modified By: $Author: barrygently $<br /> *  Last Modified On: $Date: 2005/04/28 05:48:59 $<br /> *  Current Revision: $Revision: 1.5 $<br /> */public class LikeExpression extends BinaryExpression{    private boolean not = false;    private boolean ignoreCase = false;    private List pattern = null;    public boolean isIgnoreCase ()    {	return this.ignoreCase;    }    /**     * Init the expression, we over-ride here so that if the RHS is fixed we can      * init the pattern that will be used to match the expression.     *      * @param q The Query object.     * @throws QueryParseException If the LHS and/or RHS cannot be inited.     */    public void init (Query  q)	              throws QueryParseException    {	// Call our parent first.	super.init (q);	if (this.right.hasFixedResult (q))	{	    // It does have a fixed result so get the value and init the pattern.	    Object r = null;	    try	    {		r = this.right.getValue (null,					 q);	    } catch (Exception e) {		throw new QueryParseException ("Unable to get RHS value from: \"" +					       this.right +					       "\", expected to RHS to have fixed result.",					       e);	    }	    if (r == null)	    {		// Return since we can't do anything useful now.		return;	    }	    String rs = r.toString ();	    if (this.ignoreCase)	    {		rs = rs.toLowerCase ();	    }	    char wc = q.getWildcardCharacter ();	    this.pattern = Utilities.getLikePattern (rs,						     String.valueOf (wc));	}    }        public void setIgnoreCase (boolean v)    {	this.ignoreCase = v;    }    public boolean isNot ()    {	return this.not;    }    public void setNot (boolean v)    {	this.not = v;    }    /**     * Returns whether the LHS is "LIKE" the RHS.     * A special case here is that if the LHS and RHS are both <code>null</code> then <code>true</code>     * is returned.  Also, if either the LHS or RHS is not null and one is null then <code>false</code>     * is returned.     *     * @param o The object to evaluate the expression on.     * @param q The Query object.     * @return <code>true</code> if the LHS is "LIKE" the RHS, <code>false</code> if not.  And using     *         "NOT" will invert the result.     * @throws QueryExecutionException If the expression cannot be evaluated.     */    public boolean isTrue (Object o,			   Query  q)	                   throws QueryExecutionException    {	// Get the left...	Object l = this.left.getValue (o,				       q);	if (this.pattern != null)	{	    return Utilities.matchLikePattern (this.pattern,					       l,					       this.not,					       this.ignoreCase);	}	Object r = this.right.getValue (o,					q);	if ((l == null)	    &&	    (r == null)	   )	{	    // Special case...	    if (this.not)	    {		return false;	    }	    return true;	}	if ((l == null)	    ||	    (r == null)	   )	{	    if (this.not)	    {		return true;	    }	    return false;	}	// Convert RHS to a string.	String rs = r.toString ();	if (this.ignoreCase)	{	    rs = rs.toLowerCase ();	}	// Now see if rs contains the wildcard character.	char wc = q.getWildcardCharacter ();	List pat = Utilities.getLikePattern (rs,					     String.valueOf (wc));	return Utilities.matchLikePattern (pat,					   l,					   this.not,					   this.ignoreCase);    }    /**     * Returns a string version of the expression.     * Returns in the form:     * <pre>     *   {@link Expression#toString() Expression} [ NOT ] [ $ ]LIKE {@link Expression#toString() Expression}     * </pre>     *     * @return A string representation of the expression.     */    public String toString ()    {	StringBuffer buf = new StringBuffer (this.left.toString ());	if (this.isNot ())	{	    buf.append (" NOT");	}	buf.append (" ");	if (this.ignoreCase)	{	    buf.append ("$");	}	buf.append ("LIKE ");	buf.append (this.right);	if (this.isBracketed ())	{	    buf.insert (0,			"(");	    buf.append (")");	}	return buf.toString ();    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -