【问题标题】:SQL Query StateSQL 查询状态
【发布时间】:2018-09-24 16:43:44
【问题描述】:

我来自另一个开发人员编写的一些代码。这是一个php数据库抽象层,我正在研究代码,有些看不懂。

class QueryBuilderBase
{
    /*
     * The builder SQLStates.
     */
    const STATE_DIRTY = 0;
    const STATE_CLEAN = 1;
    /**
     * @var array The array of SQL parts collected.
     */
    private $SQLBlocks = [
        'select' => [],
        'from' => [],
        'join' => [],
        'set' => [],
        'where' => null,
        'groupBy' => [],
        'having' => null,
        'orderBy' => [],
        'values' => [],
        'limit' => null
    ];
      /**
 *
 * Either appends to or replaces a single, generic query part.
 *
 * The available parts are: 'select', 'from', 'set', 'where',
 * 'groupBy', 'having' and 'orderBy'.
 *
 * @param $sqlPartName
 * @param $sqlPart
 * @param bool $append
 * @return $this
 */

    private function addSQLBlock($sqlPartName, $sqlPart, $append = false)
    {
        $isArray = is_array($sqlPart);
        $isMultiple = is_array($this->SQLBlocks[$sqlPartName]);
        if ($isMultiple && !$isArray)
            $sqlPart = array($sqlPart);
        $this->SQLState = self::STATE_DIRTY;
        .....(some other code that's not relevant)
    }
}

所以请谁能告诉我他在做什么以及 STATE_CLEAN 和 STATE_DIRTY 常量的目的是什么 谢谢。

【问题讨论】:

  • 真的很难准确判断,但从 STATE_DIRTY/STATE_CLEAN 看起来像是某种缓存机制,其中底层数据已修改但尚未保存到数据库中,所以 STATE_DIRTY
  • 你知道`SQLState`属性吗?
  • 是的,几乎所有 dbs 都使用 SQLSTATE 来表示各种事件,但它们的代码和使用方式各不相同。
  • 是的,它是某种异常值,可以是 0/1。
  • 顺便说一句,这是哪个 dbms?

标签: php sql database-abstraction


【解决方案1】:

我能想到的只是 STATE_DIRTY/STATE_CLEAN 是某种标志,用于告知由 $this->SQLBlocks 表示的查询主体是否已从上次使用对象时发生更改。 如果我错了,有人纠正我

【讨论】:

  • 这是对问题的回答/解决方案还是评论/编辑?
  • 对我来说最可能的答案,如果其他人有更准确的答案我很乐意接受它
猜你喜欢
  • 1970-01-01
  • 2018-09-05
  • 2013-07-21
  • 2012-02-18
  • 2012-08-05
  • 1970-01-01
  • 1970-01-01
  • 2019-05-21
  • 1970-01-01
相关资源
最近更新 更多