Compare commits

...

18 Commits
2.2.0 ... 2

Author SHA1 Message Date
Steve Boyd df532bb741
MNT Use gha-dispatch-ci (#71) 2023-03-20 16:31:41 +13:00
Will Rossiter 1a87b18e71
fix: remove deprecated function 2023-01-24 20:04:50 +13:00
Guy Sartorelli ee7f0e4d25
Merge pull request #65 from lekoala/patch-1
prevent php 8 complaining about null values
2022-09-06 15:59:32 +12:00
Thomas Portelange 66c1c09b74
switch back to null
users are expected to use ?? '' if needed
2022-08-31 09:00:08 +02:00
Thomas Portelange d3d03d9f79
Update code/SQLite3Connector.php
Co-authored-by: Guy Sartorelli <36352093+GuySartorelli@users.noreply.github.com>
2022-08-31 08:58:48 +02:00
Guy Sartorelli f949becc6a
Merge branch '2.1' into 2 2022-08-31 12:58:44 +12:00
Thomas Portelange ecaadc029e
Enforce proper type
Otherwise it may fail when passed to preg_match

Deprecated: preg_match(): Passing null to parameter #2 ($subject) of type string is deprecated
2022-08-19 15:07:23 +02:00
Thomas Portelange 05abb3f483
prevent php 8 complaining about null values
Fix Deprecated: SQLite3::escapeString(): Passing null to parameter #1 ($string) of type string is deprecated
2022-08-19 15:04:48 +02:00
Guy Sartorelli f102cad3bf
Merge pull request #64 from creative-commoners/pulls/2.1/phpcs
MNT Add codesniffer
2022-08-05 14:48:24 +12:00
Steve Boyd d142dd77e4 MNT Add codesniffer 2022-08-05 12:33:00 +12:00
Steve Boyd a919f8a317 Merge branch '2.1' into 2 2022-08-02 19:11:46 +12:00
Steve Boyd ea06c57cfb Merge branch '2.0' into 2.1 2022-08-02 19:11:02 +12:00
Guy Sartorelli d399c27722
Merge pull request #63 from creative-commoners/pulls/2.0/standardise-modules
MNT Standardise modules
2022-08-02 16:18:19 +12:00
Steve Boyd bf07381fc9 MNT Standardise modules 2022-08-01 16:23:18 +12:00
Guy Sartorelli 2ba8fe5c50
Merge pull request #61 from elliot-sawyer/compat/8.1
PHP 8.1 compatibility
2022-07-25 12:12:09 +12:00
Elliot Sawyer f9dfa9f34c PHP 8.1 compatibility 2022-07-20 19:17:01 +12:00
Sam Minnée c95b0105f5
Merge pull request #60 from chrometoasters/pulls/transaction-mode-not-supported
Override transaction mode support check method
2019-09-25 10:03:09 +12:00
Michal Kleiner 22d46a5ef8 Override transaction mode support check method as these are not supported by SQLite 2019-09-16 14:50:16 +12:00
13 changed files with 82 additions and 177 deletions

11
.github/workflows/ci.yml vendored Normal file
View File

@ -0,0 +1,11 @@
name: CI
on:
push:
pull_request:
workflow_dispatch:
jobs:
ci:
name: CI
uses: silverstripe/gha-ci/.github/workflows/ci.yml@v1

16
.github/workflows/dispatch-ci.yml vendored Normal file
View File

@ -0,0 +1,16 @@
name: Dispatch CI
on:
# At 3:00 PM UTC, only on Sunday and Monday
schedule:
- cron: '0 15 * * 0,1'
jobs:
dispatch-ci:
name: Dispatch CI
# Only run cron on the silverstripe account
if: (github.event_name == 'schedule' && github.repository_owner == 'silverstripe') || (github.event_name != 'schedule')
runs-on: ubuntu-latest
steps:
- name: Dispatch CI
uses: silverstripe/gha-dispatch-ci@v1

17
.github/workflows/keepalive.yml vendored Normal file
View File

@ -0,0 +1,17 @@
name: Keepalive
on:
workflow_dispatch:
# The 15th of every month at 3:50pm UTC
schedule:
- cron: '50 15 15 * *'
jobs:
keepalive:
name: Keepalive
# Only run cron on the silverstripe account
if: (github.event_name == 'schedule' && github.repository_owner == 'silverstripe') || (github.event_name != 'schedule')
runs-on: ubuntu-latest
steps:
- name: Keepalive
uses: silverstripe/gha-keepalive@v1

View File

@ -1,69 +0,0 @@
inherit: true
checks:
php:
verify_property_names: true
verify_argument_usable_as_reference: true
verify_access_scope_valid: true
useless_calls: true
use_statement_alias_conflict: true
variable_existence: true
unused_variables: true
unused_properties: true
unused_parameters: true
unused_methods: true
unreachable_code: true
too_many_arguments: true
sql_injection_vulnerabilities: true
simplify_boolean_return: true
side_effects_or_types: true
security_vulnerabilities: true
return_doc_comments: true
return_doc_comment_if_not_inferrable: true
require_scope_for_properties: true
require_scope_for_methods: true
require_php_tag_first: true
psr2_switch_declaration: true
psr2_class_declaration: true
property_assignments: true
prefer_while_loop_over_for_loop: true
precedence_mistakes: true
precedence_in_conditions: true
phpunit_assertions: true
php5_style_constructor: true
parse_doc_comments: true
parameter_non_unique: true
parameter_doc_comments: true
param_doc_comment_if_not_inferrable: true
optional_parameters_at_the_end: true
one_class_per_file: true
no_unnecessary_if: true
no_trailing_whitespace: true
no_property_on_interface: true
no_non_implemented_abstract_methods: true
no_error_suppression: true
no_duplicate_arguments: true
no_commented_out_code: true
newline_at_end_of_file: true
missing_arguments: true
method_calls_on_non_object: true
instanceof_class_exists: true
foreach_traversable: true
fix_line_ending: true
fix_doc_comments: true
duplication: true
deprecated_code_usage: true
deadlock_detection_in_loops: true
code_rating: true
closure_use_not_conflicting: true
catch_class_exists: true
blank_line_after_namespace_declaration: false
avoid_multiple_statements_on_same_line: true
avoid_duplicate_types: true
avoid_conflicting_incrementers: true
avoid_closing_tag: true
assignment_of_null_return: true
argument_type_checks: true
filter:
paths: [code/*, tests/*]

View File

@ -1,58 +0,0 @@
language: php
dist: trusty
cache:
directories:
- $HOME/.composer/cache/files
env:
global:
- DB=SQLITE
matrix:
fast_finish: true
include:
- php: 5.6
env:
- CORE_VERSION=1.0.x-dev
- PDO=0
- php: 7.0
env:
- CORE_VERSION=1.1.x-dev
- PDO=1
- php: 7.1
env:
- CORE_VERSION=4.2.x-dev
- PDO=0
- php: 7.2
env:
- CORE_VERSION=4.3.x-dev
- PDO=0
- php: 7.3
env:
- CORE_VERSION=4.x-dev
- PDO=1
- PHPCS_TEST=1
before_script:
# Init PHP
- phpenv rehash
- phpenv config-rm xdebug.ini || true
- export PATH=~/.composer/vendor/bin:$PATH
- echo 'memory_limit = 2048M' >> ~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/travis.ini
# Install composer dependencies
- composer validate
- composer require --no-update silverstripe/recipe-cms:$CORE_VERSION
- composer install --no-interaction --no-progress --no-suggest --optimize-autoloader --verbose --profile
- if [[ $PHPCS_TEST ]]; then composer global require squizlabs/php_codesniffer:^3 --prefer-dist --no-interaction --no-progress --no-suggest -o; fi
script:
- vendor/bin/phpunit vendor/silverstripe/framework/tests
- if [[ $PHPCS_TEST ]]; then composer run-script lint; fi

View File

@ -1,7 +1,7 @@
# SQLite3 Module # SQLite3 Module
[![Build Status](https://travis-ci.org/silverstripe/silverstripe-sqlite3.png?branch=master)](https://travis-ci.org/silverstripe/silverstripe-sqlite3) [![CI](https://github.com/silverstripe/silverstripe-sqlite3/actions/workflows/ci.yml/badge.svg)](https://github.com/silverstripe/silverstripe-sqlite3/actions/workflows/ci.yml)
[![SilverStripe supported module](https://img.shields.io/badge/silverstripe-supported-0071C4.svg)](https://www.silverstripe.org/software/addons/silverstripe-commercially-supported-module-list/) [![Silverstripe supported module](https://img.shields.io/badge/silverstripe-supported-0071C4.svg)](https://www.silverstripe.org/software/addons/silverstripe-commercially-supported-module-list/)
## Maintainer Contact ## Maintainer Contact
@ -10,7 +10,7 @@ Andreas Piening (Nickname: apiening)
## Requirements ## Requirements
* SilverStripe 4.0 or newer * Silverstripe 4.0 or newer
## Installation ## Installation
@ -27,7 +27,6 @@ Either use the installer to automatically install SQLite or add this to your _co
Make sure the webserver has sufficient privileges to write to that folder and that it is protected from Make sure the webserver has sufficient privileges to write to that folder and that it is protected from
external access. external access.
### Sample mysite/_config.php ### Sample mysite/_config.php
```php ```php

View File

@ -1,5 +1 @@
<?php <?php
use SilverStripe\Dev\Deprecation;
Deprecation::notification_version('1.4.0', 'sqlite3');

View File

@ -170,7 +170,7 @@ class SQLite3Connector extends DBConnector
public function escapeString($value) public function escapeString($value)
{ {
return $this->dbConn->escapeString($value); return $this->dbConn->escapeString($value ?? '');
} }
public function selectDatabase($name) public function selectDatabase($name)

View File

@ -411,7 +411,7 @@ class SQLite3Database extends Database
$queries[$class]->setFrom('"'.DataObject::getSchema()->baseDataTable($class).'"'); $queries[$class]->setFrom('"'.DataObject::getSchema()->baseDataTable($class).'"');
$queries[$class]->setSelect(array()); $queries[$class]->setSelect(array());
foreach ($select[$class] as $clause) { foreach ($select[$class] as $clause) {
if (preg_match('/^(.*) +AS +"?([^"]*)"?/i', $clause, $matches)) { if (preg_match('/^(.*) +AS +"?([^"]*)"?/i', $clause ?? '', $matches)) {
$queries[$class]->selectField($matches[1], $matches[2]); $queries[$class]->selectField($matches[1], $matches[2]);
} else { } else {
$queries[$class]->selectField(str_replace('"', '', $clause)); $queries[$class]->selectField(str_replace('"', '', $clause));
@ -460,6 +460,19 @@ class SQLite3Database extends Database
return version_compare($this->getVersion(), '3.6', '>='); return version_compare($this->getVersion(), '3.6', '>=');
} }
/**
* Does this database support transaction modes?
*
* SQLite doesn't support transaction modes.
*
* @param string $mode
* @return bool
*/
public function supportsTransactionMode(string $mode): bool
{
return false;
}
public function supportsExtensions($extensions = array('partitions', 'tablespaces', 'clustering')) public function supportsExtensions($extensions = array('partitions', 'tablespaces', 'clustering'))
{ {
if (isset($extensions['partitions'])) { if (isset($extensions['partitions'])) {
@ -659,7 +672,7 @@ class SQLite3Database extends Database
public function formattedDatetimeClause($date, $format) public function formattedDatetimeClause($date, $format)
{ {
preg_match_all('/%(.)/', $format, $matches); preg_match_all('/%(.)/', $format ?? '', $matches);
foreach ($matches[1] as $match) { foreach ($matches[1] as $match) {
if (array_search($match, array('Y', 'm', 'd', 'H', 'i', 's', 'U')) === false) { if (array_search($match, array('Y', 'm', 'd', 'H', 'i', 's', 'U')) === false) {
user_error('formattedDatetimeClause(): unsupported format character %' . $match, E_USER_WARNING); user_error('formattedDatetimeClause(): unsupported format character %' . $match, E_USER_WARNING);
@ -681,9 +694,9 @@ class SQLite3Database extends Database
$modifiers[] = 'localtime'; $modifiers[] = 'localtime';
} }
if (preg_match('/^now$/i', $date)) { if (preg_match('/^now$/i', $date ?? '')) {
$date = "'now'"; $date = "'now'";
} elseif (preg_match('/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/i', $date)) { } elseif (preg_match('/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/i', $date ?? '')) {
$date = "'$date'"; $date = "'$date'";
} }
@ -698,9 +711,9 @@ class SQLite3Database extends Database
$modifiers[] = 'localtime'; $modifiers[] = 'localtime';
} }
if (preg_match('/^now$/i', $date)) { if (preg_match('/^now$/i', $date ?? '')) {
$date = "'now'"; $date = "'now'";
} elseif (preg_match('/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/i', $date)) { } elseif (preg_match('/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/i', $date ?? '')) {
$date = "'$date'"; $date = "'$date'";
} }
@ -720,15 +733,15 @@ class SQLite3Database extends Database
$modifiers2[] = 'localtime'; $modifiers2[] = 'localtime';
} }
if (preg_match('/^now$/i', $date1)) { if (preg_match('/^now$/i', $date1 ?? '')) {
$date1 = "'now'"; $date1 = "'now'";
} elseif (preg_match('/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/i', $date1)) { } elseif (preg_match('/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/i', $date1 ?? '')) {
$date1 = "'$date1'"; $date1 = "'$date1'";
} }
if (preg_match('/^now$/i', $date2)) { if (preg_match('/^now$/i', $date2 ?? '')) {
$date2 = "'now'"; $date2 = "'now'";
} elseif (preg_match('/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/i', $date2)) { } elseif (preg_match('/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/i', $date2 ?? '')) {
$date2 = "'$date2'"; $date2 = "'$date2'";
} }

View File

@ -232,7 +232,7 @@ class SQLite3SchemaManager extends DBSchemaManager
if (self::$vacuum) { if (self::$vacuum) {
$this->query('VACUUM', E_USER_NOTICE); $this->query('VACUUM', E_USER_NOTICE);
$message = $this->database->getConnector()->getLastError(); $message = $this->database->getConnector()->getLastError();
if (preg_match('/authoriz/', $message)) { if (preg_match('/authoriz/', $message ?? '')) {
$this->alterationMessage("VACUUM | $message", "error"); $this->alterationMessage("VACUUM | $message", "error");
} else { } else {
$this->alterationMessage("VACUUMing", "repaired"); $this->alterationMessage("VACUUMing", "repaired");
@ -371,7 +371,7 @@ class SQLite3SchemaManager extends DBSchemaManager
if ($sqlCreate && $sqlCreate['sql']) { if ($sqlCreate && $sqlCreate['sql']) {
preg_match( preg_match(
'/^[\s]*CREATE[\s]+TABLE[\s]+[\'"]?[a-zA-Z0-9_\\\]+[\'"]?[\s]*\((.+)\)[\s]*$/ims', '/^[\s]*CREATE[\s]+TABLE[\s]+[\'"]?[a-zA-Z0-9_\\\]+[\'"]?[\s]*\((.+)\)[\s]*$/ims',
$sqlCreate['sql'], $sqlCreate['sql'] ?? '',
$matches $matches
); );
$fields = isset($matches[1]) $fields = isset($matches[1])

View File

@ -18,12 +18,7 @@
"silverstripe/vendor-plugin": "^1.0" "silverstripe/vendor-plugin": "^1.0"
}, },
"require-dev": { "require-dev": {
"phpunit/phpunit": "^5.7" "squizlabs/php_codesniffer": "^3"
},
"extra": {
"branch-alias": {
"2.x-dev": "2.2.x-dev"
}
}, },
"autoload": { "autoload": {
"psr-4": { "psr-4": {

View File

@ -1,11 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<ruleset name="SilverStripe"> <ruleset name="SilverStripe">
<description>CodeSniffer ruleset for SilverStripe coding conventions.</description> <description>CodeSniffer ruleset for SilverStripe coding conventions.</description>
<!-- base rules are PSR-2 --> <file>code</file>
<rule ref="PSR2" >
<!-- Current exclusions --> <!-- base rules are PSR-2 -->
<exclude name="PSR1.Methods.CamelCapsMethodName" /> <rule ref="PSR2" >
</rule> <!-- Current exclusions -->
<exclude name="PSR1.Methods.CamelCapsMethodName" />
</rule>
</ruleset> </ruleset>

View File

@ -1,16 +0,0 @@
<phpunit bootstrap="vendor/silverstripe/cms/tests/bootstrap.php" colors="true">
<testsuite name="Default">
<directory>tests</directory>
</testsuite>
<filter>
<whitelist addUncoveredFilesFromWhitelist="true">
<directory suffix=".php">.</directory>
<exclude>
<directory suffix=".php">tests/</directory>
</exclude>
</whitelist>
</filter>
</phpunit>