3namespace Bitrix\Main\DB;
6use Bitrix\Main\ArgumentNullException;
9use Bitrix\Main\ORM\Fields\ScalarField;
122 return $this->database;
136 $this->queryExecutingEnabled =
false;
149 $this->queryExecutingEnabled =
true;
160 return $this->queryExecutingEnabled;
173 $dump = $this->disabledQueryExecutingDump;
174 $this->disabledQueryExecutingDump =
null;
193 if ($this->sqlHelper ==
null)
198 return $this->sqlHelper;
229 parent::disconnect();
239 return (($this->options & self::DEFERRED) !== 0);
248 return (($this->options & self::PERSISTENT) !== 0);
301 [$sql, $binds, $offset, $limit] = self::parseQueryFunctionArgs(func_get_args());
305 $sql = $this->
getSqlHelper()->getTopSql($sql, $limit, $offset);
308 $trackerQuery =
null;
310 if ($this->queryExecutingEnabled)
320 $trackerQuery = $this->sqlTracker->getNewTrackerQuery();
328 if ($this->disabledQueryExecutingDump ===
null)
330 $this->disabledQueryExecutingDump = [];
333 $this->disabledQueryExecutingDump[] = $sql;
356 return array_shift($row);
373 $this->
query($sql, $binds);
394 $numArgs =
count($args);
410 if (is_array($args[1]))
412 [$sql, $binds] = $args;
416 [$sql, $limit] = $args;
421 if (is_array($args[1]))
423 [$sql, $binds, $limit] = $args;
427 [$sql, $offset, $limit] = $args;
432 [$sql, $binds, $offset, $limit] = $args;
435 return [$sql, $binds, $offset, $limit];
455 "INSERT INTO " . $this->
getSqlHelper()->quote($tableName) .
"(" . $insert[0] .
") " .
456 "VALUES (" . $insert[1] .
")";
480 $inserts[] = $insert;
483 foreach ($insert[0] as $column)
485 $uniqueColumns[$column] =
true;
492 foreach ($inserts as $insert)
494 $columns = array_flip($insert[0]);
495 $values = $insert[1];
499 foreach (array_keys($uniqueColumns) as $column)
501 if (array_key_exists($column, $columns))
504 $finalValues[] = $values[$columns[$column]];
509 $finalValues[] =
'DEFAULT';
513 $sqlValues[] =
'(' . join(
', ', $finalValues) .
')';
516 $sql =
"INSERT INTO {$this->getSqlHelper()->quote($tableName)} (" . join(
', ', array_keys($uniqueColumns)) .
") " .
517 "VALUES " . join(
', ', $sqlValues);
568 $delimiter = $this->
getSqlHelper()->getQueryDelimiter();
570 $sqlBatch = trim($sqlBatch);
577 if (preg_match(
"%^(.*?)(['\"`#]|--|\\$\\$|" . $delimiter .
")%is", $sqlBatch, $match))
580 if ($match[2] ==
"\"" || $match[2] ==
"'" || $match[2] ==
"`")
582 $sqlBatch = mb_substr($sqlBatch, mb_strlen($match[0]));
587 $sqlBatch = mb_substr($sqlBatch, mb_strlen($stringMatch[0]));
588 $sql .= $stringMatch[0];
598 elseif ($match[2] ==
"#" || $match[2] ==
"--")
601 $sqlBatch = mb_substr($sqlBatch, mb_strlen($match[1]));
604 $p = mb_strpos($sqlBatch,
"\n");
607 $p1 = mb_strpos($sqlBatch,
"\r");
614 $sqlBatch = mb_substr($sqlBatch,
$p);
618 $sqlBatch = mb_substr($sqlBatch, $p1);
623 $sqlBatch = mb_substr($sqlBatch,
$p);
627 elseif ($match[2] ==
'$$')
630 $sqlBatch = mb_substr($sqlBatch, mb_strlen($match[0]));
634 $p = mb_strpos($sqlBatch,
'$$');
642 $sql .= mb_substr($sqlBatch, 0,
$p + 2);
643 $sqlBatch = mb_substr($sqlBatch,
$p + 2);
650 $sqlBatch = mb_substr($sqlBatch, mb_strlen($match[0]));
653 if (preg_match(
"%^[\n\r\t ]%", $sqlBatch))
658 $statements[] = str_replace(
"\r\n",
"\n", $sql);
663 elseif (!empty($sqlBatch))
675 while (!empty($sqlBatch));
677 $sql = trim($sql,
" \t\n\r");
680 $statements[] = str_replace(
"\r\n",
"\n", $sql);
764 if (!is_array($columnNames))
766 $columnNames = [$columnNames];
769 foreach ($columnNames as &$columnName)
771 $columnName = $this->
getSqlHelper()->quote($columnName);
774 $sql =
'ALTER TABLE ' . $this->
getSqlHelper()->quote($tableName) .
' ADD PRIMARY KEY(' . join(
', ', $columnNames) .
')';
776 return $this->
query($sql);
792 if (!is_array($columnNames))
794 $columnNames = [$columnNames];
799 foreach ($columnNames as &$columnName)
805 $sql =
'CREATE INDEX ' .
$sqlHelper->quote($indexName) .
' ON ' .
$sqlHelper->quote($tableName) .
' (' . join(
', ', $columnNames) .
')';
807 return $this->
query($sql);
823 return ($tableFields[$columnName] ??
null);
834 return $this->
query(
'TRUNCATE TABLE ' . $this->
getSqlHelper()->quote($tableName));
939 if ($this->sqlTracker ==
null)
945 $this->sqlTracker->reset();
948 $this->trackSql =
true;
959 $this->trackSql =
false;
1036 $this->tableColumnsCache = [];
1057 return $this->nodeId;
1062 if (isset($this->configuration[
"include_after_connected"]) && $this->configuration[
"include_after_connected"] <>
'')
1064 include($this->configuration[
"include_after_connected"]);
1077 if (isset($this->utf8mb4[
"global"]) && $this->utf8mb4[
"global"] ===
true)
1082 if (
$table !==
null && isset($this->utf8mb4[
"tables"][
$table]) && $this->utf8mb4[
"tables"][
$table] ===
true)
1087 if (
$table !==
null && $column !==
null && isset($this->utf8mb4[
"tables"][
$table][$column]) && $this->utf8mb4[
"tables"][
$table][$column] ===
true)
1097 $columnsList = implode(
",", $columns);
1099 foreach ($indexes as $indexName => $indexColumns)
1101 ksort($indexColumns);
1102 $indexColumnList = implode(
",", $indexColumns);
1105 if ($indexColumnList === $columnsList)
1112 if (str_starts_with($indexColumnList, $columnsList))
setTracker(Diag\SqlTracker $sqlTracker=null)
isTableExists($tableName)
static findIndex(array $indexes, array $columns, $strict)
getTableField($tableName, $columnName)
static parseQueryFunctionArgs($args)
isUtf8mb4($table=null, $column=null)
getIndexName($tableName, array $columns, $strict=false)
getTableFields($tableName)
createResult($result, Diag\SqlTrackerQuery $trackerQuery=null)
createIndex($tableName, $indexName, $columnNames)
createPrimaryIndex($tableName, $columnNames)
executeSqlBatch($sqlBatch, $stopOnError=false)
startTracker($reset=false)
queryInternal($sql, array $binds=null, Diag\SqlTrackerQuery $trackerQuery=null)
renameTable($currentName, $newName)
dropColumn($tableName, $columnName)
isIndexExists($tableName, array $columns)
createQueryException($code=0, $databaseMessage='', $query='')
$disabledQueryExecutingDump
isQueryExecutingEnabled()
addMulti($tableName, $rows, $identity="ID")
getDisabledQueryExecutingDump()
add($tableName, array $data, $identity="ID")
queryScalar($sql, array $binds=null)
queryExecute($sql, array $binds=null)
createTable($tableName, $fields, $primary=[], $autoincrement=[])
truncateTable($tableName)
__construct(array $configuration)
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
if(!is_null($config))($config as $configItem)(! $configItem->isVisible()) $code
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
</p ></td >< td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 2.0pt 0cm 2.0pt;height:9.0pt'>< p class=Normal align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center;line-height:normal'>< a name=ТекстовоеПоле54 ></a ><?=($taxRate > count( $arTaxList) > 0) ? $taxRate."%"