version 1.1.2.1, 2001/12/02 20:36:49
|
version 1.8, 2007/04/17 12:38:31
|
|
|
//%///////////////////////////////////////////////////////////////////////////// |
//%2006//////////////////////////////////////////////////////////////////////// |
// | // |
// Copyright (c) 2000, 2001 BMC Software, Hewlett-Packard Company, IBM, |
// Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development |
// The Open Group, Tivoli Systems |
// Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems. |
|
// Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.; |
|
// IBM Corp.; EMC Corporation, The Open Group. |
|
// Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.; |
|
// IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group. |
|
// Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.; |
|
// EMC Corporation; VERITAS Software Corporation; The Open Group. |
|
// Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.; |
|
// EMC Corporation; Symantec Corporation; The Open Group. |
// | // |
// Permission is hereby granted, free of charge, to any person obtaining a copy | // Permission is hereby granted, free of charge, to any person obtaining a copy |
// of this software and associated documentation files (the "Software"), to | // of this software and associated documentation files (the "Software"), to |
|
|
// | // |
//============================================================================== | //============================================================================== |
// | // |
// Author: Mike Brasher (mbrasher@bmc.com) |
|
// |
|
// Modified By: |
|
// |
|
//%///////////////////////////////////////////////////////////////////////////// | //%///////////////////////////////////////////////////////////////////////////// |
| |
#ifndef Pegasus_WQLOperation_h | #ifndef Pegasus_WQLOperation_h |
|
|
| |
PEGASUS_NAMESPACE_BEGIN | PEGASUS_NAMESPACE_BEGIN |
| |
|
/** Represents SQL where clause operators. |
|
|
|
These operators include the following: |
|
|
|
<ul> |
|
<li>OR</li> |
|
<li>AND</li> |
|
<li>NOT</li> |
|
<li>=</li> |
|
<li><></li> |
|
<li><</li> |
|
<li>≤</li> |
|
<li>></li> |
|
<li>≥</li> |
|
<li>IS NULL</li> |
|
<li>IS NOT NULL</li> |
|
<li>IS TRUE</li> |
|
<li>IS NOT TRUE</li> |
|
<li>IS FALSE</li> |
|
<li>IS NOT FALSE</li> |
|
</ul> |
|
|
|
Here's an example of a SQL query that uses some of these operations. |
|
|
|
<pre> |
|
SELECT * |
|
FROM MyClass |
|
WHERE (x > 10 OR y ≤ 1.5) OR z = 19 AND name IS NOT NULL |
|
</pre> |
|
|
|
As the parser recognizes these operations, it adds the corresponding |
|
WQLOperation enumeration tag to the WQLSelectStatement by calling |
|
WQLSelectStatement::appendOperation(). |
|
|
|
Operators may be converted to string by calling WQLOperationToString(). |
|
|
|
Note that in expressions like this one: |
|
|
|
<pre> |
|
count IS TRUE |
|
</pre> |
|
|
|
The IS operator is NOT treated as a binary operator (which would take |
|
count and TRUE as its operands). Instead, the IS operator and TRUE operand |
|
are combined to form a single unary operation called "IS_TRUE". In this |
|
way, evaluation may be implemented by more efficiently (the TRUE operand |
|
is eliminated and therefore need not be handled). Conceptually, the above |
|
expression is equivalent to the following psuedo expression: |
|
|
|
<pre> |
|
IS_TRUE(count) |
|
</pre> |
|
|
|
Note that this technique is applied the following operations (also |
|
combined to be unary operations). |
|
|
|
<ul> |
|
<li>WQL_IS_NULL</li> |
|
<li>WQL_IS_NOT_NULL</li> |
|
<li>WQL_IS_TRUE</li> |
|
<li>WQL_IS_NOT_TRUE</li> |
|
<li>WQL_IS_FALSE</li> |
|
<li>WQL_IS_NOT_FALSE</li> |
|
</ul> |
|
*/ |
enum WQLOperation | enum WQLOperation |
{ | { |
WQL_OR, | WQL_OR, |
|
|
WQL_GT, | WQL_GT, |
WQL_GE, | WQL_GE, |
WQL_IS_NULL, | WQL_IS_NULL, |
WQL_CALL |
WQL_IS_NOT_NULL, |
|
WQL_IS_TRUE, |
|
WQL_IS_NOT_TRUE, |
|
WQL_IS_FALSE, |
|
WQL_IS_NOT_FALSE |
}; | }; |
| |
PEGASUS_WQL_LINKAGE const char* WQLOperationToString(WQLOperation x); | PEGASUS_WQL_LINKAGE const char* WQLOperationToString(WQLOperation x); |