Commit Graph

111 Commits

Author SHA1 Message Date
Eloy Lafuente (stronk7)
ff8a9478b2 MDL-78016 dml: Add Oracle support for OFFSET ... FETCH clauses
Since Oracle 12, these statements (providing the same than the
well-known LIMIT clauses in MySQL and PostgreSQL) are available,

Just let's switch to use them, removing the old complex ROWNUM
based queries needed before to provide limits support.
2023-05-19 17:47:57 +02:00
Marina Glancy
8fc1486d36 MDL-77164 various: fix incorrect phpdocs 2023-04-13 11:35:06 +01:00
Eloy Lafuente (stronk7)
eeaaf131ac MDL-75977 xmldb: Avoid using null params on built-in DB functions
This changes a couple of cases, in postgres and oracle where we
were trying to calculate strlen() on null values (that causes a
PHP 8.1 warning).

Also, at the same time, fixing another case in xmldb_field, it
was detected that it had a bug around precision (being set to the
value of type), being used as object property, when it's not, so
it was also fixed by moving the code logic a little bit.

Note that the bug has been there since inception because there
isn't any code in Moodle using that ->precision property. It
was just detected thanks to PHP 8.2, but that's another story. :-)

Verified that with the patch:
- All DBs can be installed (phpunit install)
- Both DDL and DML pass without any ddl/dml warning (in all DBs).
2022-11-26 16:16:20 +01:00
Alex Morris
70dfee9e23 MDL-75170 dml: add sql_order_by_null method
Standardises return patterns of null values across database types
to keep with sorting nullsto the top when ascending, and
to the bottom when descending
2022-09-30 11:27:26 +13:00
Tim Hunt
797b9fbd62 MDL-75548 misc: final Required parameter follows optional notices 2022-08-22 15:20:13 +01:00
Paul Holden
27f9929b52 MDL-72184 dml: implement driver methods for casting to char. 2022-06-12 19:31:34 +01:00
Eloy Lafuente (stronk7)
848ec32df0 MDL-74143 database: Make get_indexes() to return original column names
Sometimes, in order to provide a cross-db behaviour of unique indexes
mixing null and not null columns, we create, under the hood, some
function based indexes.

When that happens get_indexes() is returning the name of the
expression objects used to calculate that function index. But we need
the original column names to be able to compare indexes and get
column dependencies properly.

So, this patch just looks, when the index is unique and function based,
to the expressions (pretty standard CASE statements) and gets the
original column name from it.

Covered with tests.
2022-03-23 23:16:53 +01:00
Paul Holden
b2d19cc29f MDL-52817 dml: implement driver methods for SQL group concatenation. 2021-02-19 15:31:00 +00:00
Tim Hunt
dc72bc6ac5 MDL-54907 dml: Correct incorrect PHPdoc 2020-11-27 14:57:36 +00:00
Paul Holden
42fcf7d5da MDL-67394 dml: improve thrown exception when Oracle can't parse query. 2020-07-30 16:21:01 +01:00
Shamim Rezaie
b4d062c6be MDL-58584 core: remove duplications from get_columns functions 2020-02-03 15:07:15 +11:00
Ankit Agarwal
c728b45904 MDL-57192 dml: Temporarily disable query logging during setup 2017-01-03 17:24:21 +05:30
Eloy Lafuente (stronk7)
5281e6a082 MDL-52544 oracle: small tweaks
This commit just:

- Moves the null => '' to better place, restricting it to PHP >= 7.0
  (bug https://bugs.php.net/bug.php?id=72524)
- Adds a couple of notes here and there.
- Changes some small details to keep the file using the same coding.
2016-07-19 04:04:32 +02:00
Damyon Wiese
eea2fc4319 MDL-52544 oracle: php7 fixes for oci driver
These are our bugs actually - the oci docs are very clear that bound
params should be in-scope when oci_execute is called - and due to pass by value etc,
this was not true for our driver.

There is another bug that needed fixing - OCI barfs if null values are bound - this
can be avoided by setting them to '' which oci treats as null.

And finally - all our lob/clob/blob hacks were also binding to local "out-of-scope" vars.
2016-07-12 16:55:47 +08:00
Simey Lameze
87a3e50192 MDL-51374 core_dml: change database layer to pass table name as parameter 2016-03-15 14:43:45 +08:00
Russell Smith
d22a01fd99 MDL-53213 caching: Faster databasemeta caching for all databases. 2016-02-28 17:03:14 +11:00
Eloy Lafuente (stronk7)
15c0a85071 MDL-50771 oracle: Bind long (>4000byte) text as CLOB
While we already were detecting @ normalise_value()
both BLOBs and CLOBs properly on insert and update
statements (by introspectind the column specs), when
a long TEXT is being passed as part of an arbitrary
SQL, or within the conditions... it was being bound
as VARCHAR, leading to problems if used in combination
with DBMS_LOB functions.

This patch just ensures that any TEXT > 4000 bytes not
detected by normalise_value() will be, always, bound as CLOB,
unconditionally.

Covered with tests both covering its use with DBMS_LOB (the
reported bug) and also in general raw statements.
2015-08-03 10:50:56 +02:00
pau.ferrer-ocana
dd379d9af4 MDL-49234 oracle: Remove variables passed by reference error 2015-02-18 16:54:17 +01:00
Eloy Lafuente (stronk7)
bacbb4e279 MDL-47874 dml: add support for replace_all_text to oracle
And, at the same time, fix the implementation so all databases
will be using sql_substr() instead of harcoded "SUBSTRING".
2014-11-02 18:26:18 +01:00
Sam Hemelryk
b2ca12e904 Merge branch 'MDL-43884-master' of git://github.com/ankitagarwal/moodle 2014-02-04 09:11:27 +13:00
Ankit Agarwal
aa611d661c MDL-43884 database: Fix get_tables() api for external stores 2014-01-28 16:28:57 +08:00
Petr Skoda
3f17d7091b MDL-43761 refactor db manager code to send arrays of SQL to the dml driver 2014-01-24 13:45:07 +08:00
Dan Poltawski
c582565a06 MDL-43395 dml: warn about invalid limit params
Help developers to find bugs by throwing a DEBUG_DEVELOPER message
rather than ignoring this case completely.
2014-01-13 08:42:07 +08:00
Russell Smith
9c7dfbe6ed MDL-41359 database: no table columns is a dml_excpeiton
When insert_record is called and it doesn't find any columns
to insert data into, that is a dml_exception as you need at least
one column in the database to insert into it.  This can happen
when you have created a zero column database table, or the table
does not exist.
2013-12-07 08:56:24 +11:00
Ankit Agarwal
e3359b87df MDL-41586 libraries: Fix scale issues
The default value of scale should be null not false in mssql, that is the
standard with other DBs
0 is a valid value for scale, don't change it in oracle
2013-11-06 16:12:15 +08:00
Petr Škoda
302506e03a MDL-42493 revert nasty DB meta caching hack that was trying to work around shutdown issues
The original problem was resolved via new core shutdown handler support.
2013-10-25 21:20:06 +02:00
Petr Škoda
d79d5ac276 MDL-31501 rework user session architecture
List of changes:
 * New OOP API using PHP namespace \core\session\.
 * All handlers now update the sessions table consistently.
 * Experimental DB session support in Oracle.
 * Full support for session file handler (filesystem locking required).
 * New option for alternative session directory.
 * Official memcached session handler support.
 * Workaround for memcached version with non-functional gc.
 * Improved security - forced session id regeneration.
 * Improved compatibility with recent PHP releases.
 * Fixed borked CSS during install in debug mode.
 * Switched to file based sessions in new installs.
 * DB session setting disappears if DB does not support sessions.
 * DB session setting disappears if session handler specified in config.php.
 * Fast purging of sessions used in request only.
 * No legacy distinction -  file, database and memcached support the same functionality.
 * Session handler name included in performance info.
 * Fixed user_loggedin and user_loggedout event triggering.
 * Other minor bugfixing and improvements.
 * Fixed database session segfault if MUC disposed before $DB.

Limitations:
 * Session access time is now updated right after session start.
 * Support for $CFG->sessionlockloggedinonly was removed.
 * First request does not update userid in sessions table.
 * The timeouts may break badly if server hosting forces PHP.ini session settings.
 * The session GC is a lot slower, we do not rely on external session timeouts.
 * There cannot be any hooks triggered at the session write time.
 * File and memcached handlers do not support session lock acquire timeouts.
 * Some low level PHP session functions can not be used directly in Moodle code.
2013-09-21 13:11:56 +02:00
Petr Škoda
d11b8d0c63 MDL-40808 remove unused DML strings 2013-07-25 12:02:29 +02:00
Petr Škoda
8ac7cbddfc MDL-39588 require MOODLELIB Oracle package
Previously it was kind of optional, but it is now required. We also attempt to install it automatically now.
2013-06-02 11:14:43 +02:00
Dan Poltawski
e947caf4a1 Merge branch 'MDL-39389' of git://github.com/stronk7/moodle 2013-04-29 14:15:23 +01:00
Eloy Lafuente (stronk7)
20c9916396 MDL-27071 Allow Oracle IN() to use > 1000 items
By using a pivoting strategy, we modify the list
of params (QM and NAMED supported) into a
subquery, so the 1000 limit in Oracle (ORA-01795)
is not thrown anymore.
2013-04-29 01:22:38 +02:00
Eloy Lafuente (stronk7)
9043466103 MDL-39389 add databasemeta cache to ms/oci drivers 2013-04-28 18:12:38 +02:00
Petr Škoda
031a6de97a MDL-39038 nasty workaround for Oracle NULL concats 2013-04-08 23:23:08 +02:00
Petr Škoda
e788339786 MDL-37742 add debugging message when $DB->sql_empty() used 2013-03-26 22:12:17 +01:00
Petr Škoda
77a5c09354 MDL-37742 simplify dirty one-space oracle hack 2013-03-24 13:43:18 +01:00
Petr Škoda
46a86dbbc2 MDL-36211 do not lock sessions for guests and not-logged-in users 2012-11-17 10:42:47 +01:00
Petr Skoda
00902cd974 MDL-32003 fix phpdocs and use __DIR__ for includes in dml layer
DML layer is not supposed to use $CFG,
it is better to rely on __DIR__ in self-contained libs…
2012-06-17 22:56:28 +02:00
Petr Skoda
54c5b1ad35 MDL32392 delete unused is_min_version() in some DB drivers 2012-04-15 19:40:07 +02:00
Eloy Lafuente (stronk7)
7b74fb7071 MDL-32392 cleanup: adding @todo about unused is_min_version() method 2012-04-10 21:26:00 +02:00
Eloy Lafuente (stronk7)
55edb9416b MDL-32365 oracle: ensure table has 'before each row' trigger to
determine if the 'id' column is sequence based or no
2012-04-10 19:49:34 +02:00
Petr Skoda
62cd8cd9f5 MDL-32029 fix get_tables() when prefix empty in external database 2012-03-24 11:36:01 +01:00
Dan Poltawski
d68c62fe12 Merge branch 'w12_MDL-29515_m23_deprdb' of git://github.com/skodak/moodle 2012-03-21 09:25:47 +08:00
Petr Skoda
de640a2d3f MDL-29515 remove deprecated $DB->sql_ilike() and fix debug messages 2012-03-17 19:20:39 +01:00
Petr Skoda
e618cdf3f6 MDL-29894 forbid objects in DML parameters
Objects with __toString we never fully supported as parameters in DML layer, this finally brings consistent behaviour.
2012-03-17 18:44:12 +01:00
Petr Skoda
05aae0a571 MDL-29514 drop support for enum data types 2012-03-10 21:36:48 +01:00
Petr Skoda
a681b6c0a9 MDL-31689 fix moodle_database:execute() description 2012-03-07 12:36:40 +01:00
Dan Poltawski
6ad22bb164 MDL-29199 dml: fix query logging on Oracle
thanks to Jonathon Fowler for the fix
2012-02-24 11:57:18 +08:00
Aparup Banerjee
dafa20e85c MDL-30972 Documentation : improved @see as well as added appropriate uses of inline @link. 2012-02-16 10:29:45 +08:00
Aparup Banerjee
a0eb2e97f9 MDL-30972 Documentation : Renamed DB engine drivers to "@package core" but moodle_*.php are "@subpackage dml_driver", all other dml/*.php are "@subpackage dml". 2012-02-09 10:01:42 +08:00
Aparup Banerjee
6df260107c MDL-30972 Documentation : clarified phpdocs for main public APIs in DML layer and touched up on some drivers 2012-02-09 10:01:42 +08:00