diff options
Diffstat (limited to 'www/wiki/extensions/SemanticMediaWiki/src/SQLStore/QueryEngine/QuerySegment.php')
-rw-r--r-- | www/wiki/extensions/SemanticMediaWiki/src/SQLStore/QueryEngine/QuerySegment.php | 169 |
1 files changed, 169 insertions, 0 deletions
diff --git a/www/wiki/extensions/SemanticMediaWiki/src/SQLStore/QueryEngine/QuerySegment.php b/www/wiki/extensions/SemanticMediaWiki/src/SQLStore/QueryEngine/QuerySegment.php new file mode 100644 index 00000000..ce176410 --- /dev/null +++ b/www/wiki/extensions/SemanticMediaWiki/src/SQLStore/QueryEngine/QuerySegment.php @@ -0,0 +1,169 @@ +<?php + +namespace SMW\SQLStore\QueryEngine; + +/** + * Class for representing a single (sub)query description. + * + * @license GNU GPL v2+ + * @since 2.2 + * + * @author Markus Krötzsch + * @author Jeroen De Dauw + */ +class QuerySegment { + + /** + * Type of empty query without usable condition, dropped as soon as + * discovered. This is used only during preparing the query (no + * queries of this type should ever be added). + */ + const Q_NOQUERY = 0; + + /** + * Type of query that is a join with a query (jointable: internal + * table name; joinfield/components/where use alias.fields; + * from uses external table names, components interpreted + * conjunctively (JOIN)). + */ + const Q_TABLE = 1; + + /** + * Type of query that matches a constant value (joinfield is a + * disjunctive array of unquoted values, jointable empty, components + * empty). + */ + const Q_VALUE = 2; + + /** + * Type of query that is a disjunction of other queries + * (joinfield/jointable empty; only components relevant) + */ + const Q_DISJUNCTION = 3; + + /** + * Type of query that is a conjunction of other queries + * (joinfield/jointable empty; only components relevant). + */ + const Q_CONJUNCTION = 4; + + /** + * Type of query that creates a temporary table of all superclasses + * of given classes (only joinfield relevant: (disjunctive) array of + * unquoted values). + */ + const Q_CLASS_HIERARCHY = 5; + + /** + * Type of query that creates a temporary table of all superproperties + * of given properties (only joinfield relevant: (disjunctive) array + * of unquoted values). + */ + const Q_PROP_HIERARCHY = 6; + + /** + * @var integer + */ + public $type = self::Q_TABLE; + + /** + * @var integer|null + */ + public $depth; + + /** + * @var string + */ + public $fingerprint = ''; + + /** + * @var boolean + */ + public $null = false; + + /** + * @var boolean + */ + public $not = false; + + /** + * @var string + */ + public $joinType = ''; + + /** + * @var string + */ + public $joinTable = ''; + + /** + * @var string|array + */ + public $joinfield = ''; + + /** + * Allows to define an index field, for example in case when a sub-query rewires + * a match condition. + * + * @var string + */ + public $indexField = ''; + + /** + * @var string + */ + public $from = ''; + + /** + * @var string + */ + public $where = ''; + + /** + * @var string[] + */ + public $components = []; + + /** + * The alias to be used for jointable; read-only after construct! + * @var string + */ + public $alias; + + /** + * property dbkey => db field; passed down during query execution. + * @var string[] + */ + public $sortfields = []; + + /** + * @var integer + */ + public $queryNumber; + + /** + * @var integer + */ + public static $qnum = 0; + + /** + * @since 2.2 + */ + public function __construct() { + $this->queryNumber = self::$qnum; + $this->alias = 't' . self::$qnum; + self::$qnum++; + } + + /** + * @since 2.2 + */ + public function reset() { + self::$qnum = 0; + + $this->queryNumber = self::$qnum; + $this->alias = 't' . self::$qnum; + self::$qnum++; + } + +} |