Files
crm.clientright.ru/libraries/adodb/drivers/adodb-sqlanywhere.inc.php
Fedor ac7467f0b4 Major CRM updates: AI Assistant, Court Status API, S3 integration improvements, and extensive file storage system
- Added comprehensive AI Assistant system (aiassist/ directory):
  * Vector search and embedding capabilities
  * Typebot proxy integration
  * Elastic search functionality
  * Message classification and chat history
  * MCP proxy for external integrations

- Implemented Court Status API (GetCourtStatus.php):
  * Real-time court document status checking
  * Integration with external court systems
  * Comprehensive error handling and logging

- Enhanced S3 integration:
  * Improved file backup system with metadata
  * Batch processing capabilities
  * Enhanced error logging and recovery
  * Copy operations with URL fixing

- Added Telegram contact creation API
- Improved error logging across all modules
- Enhanced callback system for AI responses
- Extensive backup file storage with timestamps
- Updated documentation and README files

- File storage improvements:
  * Thousands of backup files with proper metadata
  * Fix operations for broken file references
  * Project-specific backup and recovery systems
  * Comprehensive file integrity checking

Total: 26,461+ files added/modified including AWS SDK, vendor dependencies, and extensive backup system.
2025-10-16 11:17:21 +03:00

166 lines
4.1 KiB
PHP

<?php
/*
@version v5.20.9 21-Dec-2016
@copyright (c) 2000-2013 John Lim (jlim#natsoft.com). All rights
@copyright (c) 2014 Damien Regad, Mark Newnham and the ADOdb community
reserved.
Released under both BSD license and Lesser GPL library license.
Whenever there is any discrepancy between the two licenses,
the BSD license will take precedence.
Set tabs to 4 for best viewing.
Latest version is available at http://adodb.sourceforge.net
21.02.2002 - Wade Johnson wade@wadejohnson.de
Extended ODBC class for Sybase SQLAnywhere.
1) Added support to retrieve the last row insert ID on tables with
primary key column using autoincrement function.
2) Added blob support. Usage:
a) create blob variable on db server:
$dbconn->create_blobvar($blobVarName);
b) load blob var from file. $filename must be complete path
$dbcon->load_blobvar_from_file($blobVarName, $filename);
c) Use the $blobVarName in SQL insert or update statement in the values
clause:
$recordSet = $dbconn->Execute('INSERT INTO tabname (idcol, blobcol) '
.
'VALUES (\'test\', ' . $blobVarName . ')');
instead of loading blob from a file, you can also load from
an unformatted (raw) blob variable:
$dbcon->load_blobvar_from_var($blobVarName, $varName);
d) drop blob variable on db server to free up resources:
$dbconn->drop_blobvar($blobVarName);
Sybase_SQLAnywhere data driver. Requires ODBC.
*/
// security - hide paths
if (!defined('ADODB_DIR')) die();
if (!defined('_ADODB_ODBC_LAYER')) {
include(ADODB_DIR."/drivers/adodb-odbc.inc.php");
}
if (!defined('ADODB_SYBASE_SQLANYWHERE')){
define('ADODB_SYBASE_SQLANYWHERE',1);
class ADODB_sqlanywhere extends ADODB_odbc {
var $databaseType = "sqlanywhere";
var $hasInsertID = true;
function _insertid() {
return $this->GetOne('select @@identity');
}
function create_blobvar($blobVarName) {
$this->Execute("create variable $blobVarName long binary");
return;
}
function drop_blobvar($blobVarName) {
$this->Execute("drop variable $blobVarName");
return;
}
function load_blobvar_from_file($blobVarName, $filename) {
$chunk_size = 1000;
$fd = fopen ($filename, "rb");
$integer_chunks = (integer)filesize($filename) / $chunk_size;
$modulus = filesize($filename) % $chunk_size;
if ($modulus != 0){
$integer_chunks += 1;
}
for($loop=1;$loop<=$integer_chunks;$loop++){
$contents = fread ($fd, $chunk_size);
$contents = bin2hex($contents);
$hexstring = '';
for($loop2=0;$loop2<strlen($contents);$loop2+=2){
$hexstring .= '\x' . substr($contents,$loop2,2);
}
$hexstring = $this->qstr($hexstring);
$this->Execute("set $blobVarName = $blobVarName || " . $hexstring);
}
fclose ($fd);
return;
}
function load_blobvar_from_var($blobVarName, &$varName) {
$chunk_size = 1000;
$integer_chunks = (integer)strlen($varName) / $chunk_size;
$modulus = strlen($varName) % $chunk_size;
if ($modulus != 0){
$integer_chunks += 1;
}
for($loop=1;$loop<=$integer_chunks;$loop++){
$contents = substr ($varName, (($loop - 1) * $chunk_size), $chunk_size);
$contents = bin2hex($contents);
$hexstring = '';
for($loop2=0;$loop2<strlen($contents);$loop2+=2){
$hexstring .= '\x' . substr($contents,$loop2,2);
}
$hexstring = $this->qstr($hexstring);
$this->Execute("set $blobVarName = $blobVarName || " . $hexstring);
}
return;
}
/*
Insert a null into the blob field of the table first.
Then use UpdateBlob to store the blob.
Usage:
$conn->Execute('INSERT INTO blobtable (id, blobcol) VALUES (1, null)');
$conn->UpdateBlob('blobtable','blobcol',$blob,'id=1');
*/
function UpdateBlob($table,$column,&$val,$where,$blobtype='BLOB')
{
$blobVarName = 'hold_blob';
$this->create_blobvar($blobVarName);
$this->load_blobvar_from_var($blobVarName, $val);
$this->Execute("UPDATE $table SET $column=$blobVarName WHERE $where");
$this->drop_blobvar($blobVarName);
return true;
}
}; //class
class ADORecordSet_sqlanywhere extends ADORecordSet_odbc {
var $databaseType = "sqlanywhere";
function __construct($id,$mode=false)
{
parent::__construct($id,$mode);
}
}; //class
} //define