@@ -1294,6 +1294,63 @@ PHP_METHOD(sqlite3, enableExceptions)
1294
1294
}
1295
1295
/* }}} */
1296
1296
1297
+ #if SQLITE_VERSION_NUMBER >= 3006011
1298
+ /* {{{ proto bool SQLite3::backup(SQLite3 destination_db[, string source_dbname = "main"[, string destination_dbname = "main"]])
1299
+ Backups the current database to another one. */
1300
+ PHP_METHOD (sqlite3 , backup )
1301
+ {
1302
+ php_sqlite3_db_object * source_obj ;
1303
+ php_sqlite3_db_object * destination_obj ;
1304
+ char * source_dbname = "main" , * destination_dbname = "main" ;
1305
+ size_t source_dbname_length , destination_dbname_length ;
1306
+ zval * source_zval = ZEND_THIS ;
1307
+ zval * destination_zval ;
1308
+ sqlite3_backup * dbBackup ;
1309
+ int rc ; // Return code
1310
+
1311
+ source_obj = Z_SQLITE3_DB_P (source_zval );
1312
+ SQLITE3_CHECK_INITIALIZED (source_obj , source_obj -> initialised , SQLite3 )
1313
+
1314
+ if (zend_parse_parameters (ZEND_NUM_ARGS (), "O|ss" , & destination_zval , php_sqlite3_sc_entry , & source_dbname , & source_dbname_length , & destination_dbname , & destination_dbname_length ) == FAILURE ) {
1315
+ return ;
1316
+ }
1317
+
1318
+ destination_obj = Z_SQLITE3_DB_P (destination_zval );
1319
+
1320
+ SQLITE3_CHECK_INITIALIZED (destination_obj , destination_obj -> initialised , SQLite3 )
1321
+
1322
+ dbBackup = sqlite3_backup_init (destination_obj -> db , destination_dbname , source_obj -> db , source_dbname );
1323
+
1324
+ if (dbBackup ) {
1325
+ do {
1326
+ rc = sqlite3_backup_step (dbBackup , -1 );
1327
+ } while (rc == SQLITE_OK );
1328
+
1329
+ /* Release resources allocated by backup_init(). */
1330
+ rc = sqlite3_backup_finish (dbBackup );
1331
+ }
1332
+ else {
1333
+ rc = sqlite3_errcode (source_obj -> db );
1334
+ }
1335
+
1336
+ if (rc != SQLITE_OK ) {
1337
+ if (rc == SQLITE_BUSY ) {
1338
+ php_sqlite3_error (source_obj , "Backup failed: source database is busy" );
1339
+ }
1340
+ else if (rc == SQLITE_LOCKED ) {
1341
+ php_sqlite3_error (source_obj , "Backup failed: source database is locked" );
1342
+ }
1343
+ else {
1344
+ php_sqlite3_error (source_obj , "Backup failed: %d, %s" , rc , sqlite3_errmsg (source_obj -> db ));
1345
+ }
1346
+ RETURN_FALSE ;
1347
+ }
1348
+
1349
+ RETURN_TRUE ;
1350
+ }
1351
+ /* }}} */
1352
+ #endif
1353
+
1297
1354
/* {{{ proto int SQLite3Stmt::paramCount()
1298
1355
Returns the number of parameters within the prepared statement. */
1299
1356
PHP_METHOD (sqlite3stmt , paramCount )
@@ -2058,6 +2115,14 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_sqlite3_enableexceptions, 0, 0, 0)
2058
2115
ZEND_ARG_INFO (0 , enableExceptions )
2059
2116
ZEND_END_ARG_INFO ()
2060
2117
2118
+ #if SQLITE_VERSION_NUMBER >= 3006011
2119
+ ZEND_BEGIN_ARG_INFO_EX (arginfo_sqlite3_backup , 0 , 0 , 1 )
2120
+ ZEND_ARG_INFO (0 , destination_db )
2121
+ ZEND_ARG_INFO (0 , source_dbname )
2122
+ ZEND_ARG_INFO (0 , destination_dbname )
2123
+ ZEND_END_ARG_INFO ()
2124
+ #endif
2125
+
2061
2126
ZEND_BEGIN_ARG_INFO_EX (arginfo_sqlite3stmt_bindparam , 0 , 0 , 2 )
2062
2127
ZEND_ARG_INFO (0 , param_number )
2063
2128
ZEND_ARG_INFO (1 , param )
@@ -2117,6 +2182,9 @@ static const zend_function_entry php_sqlite3_class_methods[] = {
2117
2182
PHP_ME (sqlite3 , createCollation , arginfo_sqlite3_createcollation , ZEND_ACC_PUBLIC )
2118
2183
PHP_ME (sqlite3 , openBlob , arginfo_sqlite3_openblob , ZEND_ACC_PUBLIC )
2119
2184
PHP_ME (sqlite3 , enableExceptions , arginfo_sqlite3_enableexceptions , ZEND_ACC_PUBLIC )
2185
+ #if SQLITE_VERSION_NUMBER >= 3006011
2186
+ PHP_ME (sqlite3 , backup , arginfo_sqlite3_backup , ZEND_ACC_PUBLIC )
2187
+ #endif
2120
2188
/* Aliases */
2121
2189
PHP_MALIAS (sqlite3 , __construct , open , arginfo_sqlite3_open , ZEND_ACC_PUBLIC )
2122
2190
PHP_FE_END
0 commit comments