Commit Graph

80 Commits

Author SHA1 Message Date
Kevin Locke
6d55670e42 Tighten quoting of ID identifiers
The quoting of identifiers which contain "ID" can match things other
than identifiers, such as strings which contain "ID" and subsequently
"=".  An example of this occurring in practice is:

Error running :
UPDATE `wp_ngg_pictures` SET `pid` = '42', `post_id` = 0, `galleryid` = '3', `filename` = 'img_0683.jpg', `description` = '', `alttext` = 'img_0683', `imagedate` = '2011-02-05 11:52:31', `exclude` = '0', `sortorder` = '0', `meta_data` = 'eyIwIjpmYWxzZSwiYXBlcnR1cmUiOiJGIDUuNiIsImNyZWRpdCI6ZmFsc2UsImNhbWVyYSI6IkNhbm9uIEVPUyBSRUJFTCBUMWkiLCJjYXB0aW9uIjpmYWxzZSwiY3JlYXRlZF90aW1lc3RhbXAiOiJGZWJydWFyeSA1LCAyMDExIDExOjUyIGFtIiwiY29weXJpZ2h0IjpmYWxzZSwiZm9jYWxfbGVuZ3RoIjoiNTUgbW0iLCJpc28iOjQwMCwic2h1dHRlcl9zcGVlZCI6IjFcLzYwIHNlYyIsImZsYXNoIjoiRmlyZWQiLCJ0aXRsZSI6ZmFsc2UsImtleXdvcmRzIjpmYWxzZSwid2lkdGgiOjE2MDAsImhlaWdodCI6MTA2Nywic2F2ZWQiOnRydWUsInRodW1ibmFpbCI6eyJ3aWR0aCI6MTAwLCJoZWlnaHQiOjc1fSwibmdnMGR5bi0weDI1MC0wMGYwdzAxMWMwMTByMTEwZjExMHIwMTB0MDEwIjp7IndpZHRoIjozNzUsImhlaWdodCI6MjUwLCJmaWxlbmFtZSI6ImltZ18wNjgzLmpwZy1uZ2dpZDAyNDItbmdnMGR5bi0weDI1MC0wMGYwdzAxMWMwMTByMTEwZjExMHIwMTB0MDEwLmpwZyIsImdlbmVyYXRlZCI6IjAuNjczMzIxMDAgMTQzMzYyOTQxMiJ9fQ==', `image_slug` = 'img_0683', `extras_post_id` = '310', `updated_at` = '1433629412' WHERE `pid` = '42'
---- converted to ----
UPDATE wp_ngg_pictures SET pid = '42', post_id = 0, galleryid = '3', filename = 'img_0683.jpg', description = '', alttext = 'img_0683', imagedate = '2011-02-05 11:52:31', exclude = '0', sortorder = '0', meta_data = "'eyIwIjpmYWxzZSwiYXBlcnR1cmUiOiJGIDUuNiIsImNyZWRpdCI6ZmFsc2UsImNhbWVyYSI6IkNhbm9uIEVPUyBSRUJFTCBUMWkiLCJjYXB0aW9uIjpmYWxzZSwiY3JlYXRlZF90aW1lc3RhbXAiOiJGZWJydWFyeSA1LCAyMDExIDExOjUyIGFtIiwiY29weXJpZ2h0IjpmYWxzZSwiZm9jYWxfbGVuZ3RoIjoiNTUgbW0iLCJpc28iOjQwMCwic2h1dHRlcl9zcGVlZCI6IjFcLzYwIHNlYyIsImZsYXNoIjoiRmlyZWQiLCJ0aXRsZSI6ZmFsc2UsImtleXdvcmRzIjpmYWxzZSwid2lkdGgiOjE2MDAsImhlaWdodCI6MTA2Nywic2F2ZWQiOnRydWUsInRodW1ibmFpbCI6eyJ3aWR0aCI6MTAwLCJoZWlnaHQiOjc1fSwibmdnMGR5bi0weDI1MC0wMGYwdzAxMWMwMTByMTEwZjExMHIwMTB0MDEwIjp7IndpZHRoIjozNzUsImhlaWdodCI6MjUwLCJmaWxlbmFtZSI6ImltZ18wNjgzLmpwZy1uZ2dpZDAyNDItbmdnMGR5bi0weDI1MC0wMGYwdzAxMWMwMTByMTEwZjExMHIwMTB0MDEwLmpwZyIsImdlbmVyYXRlZCI6IjAuNjczMzIxMDAgMTQzMzYyOTQxMiJ9fQ=" =', image_slug = 'img_0683', extras_post_id = '310', updated_at = '1433629412' WHERE pid = '42'
----> ERROR:  syntax error at or near "img_0683"
LINE 1: ...jczMzIxMDAgMTQzMzYyOTQxMiJ9fQ=" =', image_slug = 'img_0683',...

To avoid this, ensure that the matched substring is not part of a SQL
string literal.

Signed-off-by: Kevin Locke <kevin@kevinlocke.name>
2015-06-06 21:48:28 -06:00
Kevin Locke
dc9e036000 Replace '0000-00-00 00:00:00' with NOW() in UPDATE
As in INSERT statements, '0000-00-00 00:00:00' needs to be replaced with
a value that can be stored in PostgreSQL to avoid errors such as:

Error running :
UPDATE `wp_posts` SET `post_author` = 2, `post_date` = '2015-06-03 03:13:45', `post_date_gmt` = '0000-00-00 00:00:00', `post_content` = 'eyJpZF9maWVsZCI6IklEIiwiX19kZWZhdWx0c19zZXQiOnRydWV9', `post_content_filtered` = 'eyJpZF9maWVsZCI6IklEIiwiX19kZWZhdWx0c19zZXQiOnRydWV9', `post_title` = 'Untitled ngg_pictures', `post_excerpt` = '', `post_status` = 'draft', `post_type` = 'ngg_pictures', `comment_status` = 'closed', `ping_status` = 'closed', `post_password` = '', `post_name` = 'mixin_nextgen_table_extras', `to_ping` = '', `pinged` = '', `post_modified` = '2015-06-03 03:13:45', `post_modified_gmt` = '2015-06-03 09:13:45', `post_parent` = 0, `menu_order` = 0, `post_mime_type` = '', `guid` = 'https://example.com/?post_type=ngg_pictures&#038;p=237' WHERE `ID` = 237
---- converted to ----
UPDATE wp_posts SET post_author = 2, post_date = '2015-06-03 03:13:45', post_date_gmt = '0000-00-00 00:00:00', post_content = 'eyJpZF9maWVsZCI6IklEIiwiX19kZWZhdWx0c19zZXQiOnRydWV9', post_content_filtered = 'eyJpZF9maWVsZCI6IklEIiwiX19kZWZhdWx0c19zZXQiOnRydWV9', post_title = 'Untitled ngg_pictures', post_excerpt = '', post_status = 'draft', post_type = 'ngg_pictures', comment_status = 'closed', ping_status = 'closed', post_password = '', post_name = 'mixin_nextgen_table_extras', to_ping = '', pinged = '', post_modified = '2015-06-03 03:13:45', post_modified_gmt = '2015-06-03 09:13:45', post_parent = 0, menu_order = 0, post_mime_type = '', guid = 'https://example.com/?post_type=ngg_pictures&#038;p=237' WHERE "ID" = 237
----> ERROR:  date/time field value out of range: "0000-00-00 00:00:00"
LINE 1: ...ost_date = '2015-06-03 03:13:45', post_date_gmt = '0000-00-0...

Match the INSERT behavior and replace it with NOW() in the GMT timezone.

Signed-off-by: Kevin Locke <kevin@kevinlocke.name>
2015-06-06 21:48:28 -06:00
Kevin Locke
83e5074461 Add support for sql_mode variable
This appears as both "SELECT @@SESSION.sql_mode" checked from wp-db.php
in Wordpress core during startup and as "SHOW VARIABLES LIKE 'sql_mode'"
in several extensions (all-in-one-seo-pack, flash-album-gallery, and
nextgen-gallery on my system).  Support both by returning the empty
string, which reports the default MySQL behavior (and avoids attempts to
change the mode, since all current code expects this).

Signed-off-by: Kevin Locke <kevin@kevinlocke.name>
2015-06-06 21:48:28 -06:00
Kevin Locke
6aea521bf2 Rework SHOW COLUMNS/INDEX/TABLE support
Wordpress 4 makes use of SHOW COLUMNS and SHOW TABLES in addition to
SHOW INDEX, both with and without the FULL modifier.  Implement support
for these statements using queries against INFORMATION_SCHEMA.

Some of these queries use lower-case versions of these statements,
such as "show tables like 'wp_flag_pictures'", so we make sure to
recognize both the upper- and lower-case versions.

This is based, in part, on the work of raptorz in the support forum at
https://wordpress.org/support/topic/upgrade-to-wp421-fail?replies=3#post-6886123

Signed-off-by: Kevin Locke <kevin@kevinlocke.name>
2015-06-06 21:47:30 -06:00
Kevin Locke
935a99c429 Rewrite multi-table delete of wp_options
During schema upgrade, populate_options() deletes all expired transients
and their corresponding transient timeouts.  The queries produce the
following errors:

Error running :
DELETE a, b FROM wp_options a, wp_options b
		WHERE a.option_name LIKE '\_transient\_%'
		AND a.option_name NOT LIKE '\_transient\_timeout\_%'
		AND b.option_name = CONCAT( '_transient_timeout_', SUBSTRING( a.option_name, 12 ) )
		AND b.option_value < 1433110465
---- converted to ----
DELETE a, b FROM wp_options a, wp_options b
		WHERE a.option_name LIKE '\_transient\_%'
		AND a.option_name NOT LIKE '\_transient\_timeout\_%'
		AND b.option_name = CONCAT( '_transient_timeout_', SUBSTRING( a.option_name, 12 ) )
		AND b.option_value < 1433110465
----> ERROR:  syntax error at or near "a"
LINE 1: DELETE a, b FROM wp_options a, wp_options b
               ^
---------------------
Error running :
DELETE a, b FROM wp_options a, wp_options b
			WHERE a.option_name LIKE '\_site\_transient\_%'
			AND a.option_name NOT LIKE '\_site\_transient\_timeout\_%'
			AND b.option_name = CONCAT( '_site_transient_timeout_', SUBSTRING( a.option_name, 17 ) )
			AND b.option_value < 1433110465
---- converted to ----
DELETE a, b FROM wp_options a, wp_options b
			WHERE a.option_name LIKE '\_site\_transient\_%'
			AND a.option_name NOT LIKE '\_site\_transient\_timeout\_%'
			AND b.option_name = CONCAT( '_site_transient_timeout_', SUBSTRING( a.option_name, 17 ) )
			AND b.option_value < 1433110465
----> ERROR:  syntax error at or near "a"
LINE 1: DELETE a, b FROM wp_options a, wp_options b
               ^
---------------------

Since PostgreSQL does not support multi-table DELETE statements,
significant rewriting must be done.  Since I could not think of a good
generic way to perform this rewriting, recognize this statement
specifically and provide an alternative version.

Signed-off-by: Kevin Locke <kevin@kevinlocke.name>
2015-06-03 00:42:27 -06:00
hawk__
b67e7c6780 Integrated changes from http://vitoriodelage.wordpress.com/2014/06/06/add-missing-wpsql_errno-in-pg4wp-plugin/
Changes for 1.3.1 release

git-svn-id: https://plugins.svn.wordpress.org/postgresql-for-wordpress/trunk@969858 b8457f37-d9ea-0310-8a92-e5e31aec5664
2014-08-21 16:50:36 +00:00
hawk__
3e2733096e Removed an old unused upgrade hack
git-svn-id: https://plugins.svn.wordpress.org/postgresql-for-wordpress/trunk@557852 b8457f37-d9ea-0310-8a92-e5e31aec5664
2012-06-14 09:39:23 +00:00
hawk__
cb8eb1231d Corrected a problem with ID quoting when importing in WP 2.9.2
git-svn-id: https://plugins.svn.wordpress.org/postgresql-for-wordpress/trunk@557841 b8457f37-d9ea-0310-8a92-e5e31aec5664
2012-06-14 09:15:09 +00:00
hawk__
72b1fa1017 Enhanced wordpress-importer compatibility
git-svn-id: https://plugins.svn.wordpress.org/postgresql-for-wordpress/trunk@547119 b8457f37-d9ea-0310-8a92-e5e31aec5664
2012-05-21 18:06:44 +00:00
hawk__
7d70a7bc8c Removed a PHP notice in wpsql_connect()
git-svn-id: https://plugins.svn.wordpress.org/postgresql-for-wordpress/trunk@546732 b8457f37-d9ea-0310-8a92-e5e31aec5664
2012-05-20 22:17:54 +00:00
hawk__
78e876dec0 Reworked wpsql_insert_id() for better report of errors
git-svn-id: https://plugins.svn.wordpress.org/postgresql-for-wordpress/trunk@546724 b8457f37-d9ea-0310-8a92-e5e31aec5664
2012-05-20 21:57:33 +00:00
hawk__
9120c5fec2 Protect against a possible collision when handling 'ON DUPLICATE KEY'
git-svn-id: https://plugins.svn.wordpress.org/postgresql-for-wordpress/trunk@546689 b8457f37-d9ea-0310-8a92-e5e31aec5664
2012-05-20 19:24:06 +00:00
hawk__
749fe8fb59 Updated call to mysql_escape_string() which is deprecated
git-svn-id: https://plugins.svn.wordpress.org/postgresql-for-wordpress/trunk@546644 b8457f37-d9ea-0310-8a92-e5e31aec5664
2012-05-20 16:58:04 +00:00
hawk__
bb14143c77 Added a handle for DROP TABLE to remove sequences that are linked with the dropped table
git-svn-id: https://plugins.svn.wordpress.org/postgresql-for-wordpress/trunk@546567 b8457f37-d9ea-0310-8a92-e5e31aec5664
2012-05-20 12:57:04 +00:00
hawk__
21754d862d Added a hack so that wp_terms_seq is updated on installation
git-svn-id: https://plugins.svn.wordpress.org/postgresql-for-wordpress/trunk@546556 b8457f37-d9ea-0310-8a92-e5e31aec5664
2012-05-20 12:30:56 +00:00
hawk__
943887362c Moved the quoting hacks for PostgreSQL 9.1+ compatibility so that they apply to all queries
git-svn-id: https://plugins.svn.wordpress.org/postgresql-for-wordpress/trunk@546507 b8457f37-d9ea-0310-8a92-e5e31aec5664
2012-05-20 10:24:18 +00:00
hawk__
b2c7c3e662 Enhanced the ignore for unexisting relations when installing
git-svn-id: https://plugins.svn.wordpress.org/postgresql-for-wordpress/trunk@544614 b8457f37-d9ea-0310-8a92-e5e31aec5664
2012-05-15 19:19:51 +00:00
hawk__
2e144463e5 Corrected 2 matching that were not accurate enough
git-svn-id: https://plugins.svn.wordpress.org/postgresql-for-wordpress/trunk@544607 b8457f37-d9ea-0310-8a92-e5e31aec5664
2012-05-15 19:01:56 +00:00
hawk__
bdea3e9546 Added a modifier for COUNT(.+)...ORDER BY... to be handled correctly even when ther is a newline character
git-svn-id: https://plugins.svn.wordpress.org/postgresql-for-wordpress/trunk@542085 b8457f37-d9ea-0310-8a92-e5e31aec5664
2012-05-09 21:33:33 +00:00
hawk__
4cc22003a8 Added a handle for converting CAST(... AS CHAR) to CAST(... AS TEXT) (Problem pointed out by Aart Jan)
git-svn-id: https://plugins.svn.wordpress.org/postgresql-for-wordpress/trunk@542064 b8457f37-d9ea-0310-8a92-e5e31aec5664
2012-05-09 20:59:27 +00:00
hawk__
cd0b6c4916 Forgot to remove 2 lines in the previous commit
git-svn-id: https://plugins.svn.wordpress.org/postgresql-for-wordpress/trunk@542049 b8457f37-d9ea-0310-8a92-e5e31aec5664
2012-05-09 20:29:23 +00:00
hawk__
e5f2f14aa1 Added support for specifying the port in the server hostname eg. 'localhost:3128'
git-svn-id: https://plugins.svn.wordpress.org/postgresql-for-wordpress/trunk@542045 b8457f37-d9ea-0310-8a92-e5e31aec5664
2012-05-09 20:21:42 +00:00
hawk__
dba478b671 Added support for PostgreSQL 9.1+ default config for standard_conforming_strings
git-svn-id: https://plugins.svn.wordpress.org/postgresql-for-wordpress/trunk@542038 b8457f37-d9ea-0310-8a92-e5e31aec5664
2012-05-09 20:17:16 +00:00
hawk__
afadc6b033 Added a timestamp to logs
Ignore errors about table "options" not existing when installing

git-svn-id: https://plugins.svn.wordpress.org/postgresql-for-wordpress/trunk@458029 b8457f37-d9ea-0310-8a92-e5e31aec5664
2011-10-31 21:50:04 +00:00
hawk__
c89f560605 Correct SQL_CALC_FOUND_ROWS handling as it was broken by the latest code reorganisation
git-svn-id: https://plugins.svn.wordpress.org/postgresql-for-wordpress/trunk@436152 b8457f37-d9ea-0310-8a92-e5e31aec5664
2011-09-11 00:00:04 +00:00
hawk__
b661a7bde5 Moved all the rewriting code to a separate function (for easier testing)
Reworked 'ON DUPLICATE ...' handling, could fail in some cases

git-svn-id: https://plugins.svn.wordpress.org/postgresql-for-wordpress/trunk@436145 b8457f37-d9ea-0310-8a92-e5e31aec5664
2011-09-10 23:38:01 +00:00
hawk__
c9a58af607 Forgot to remove debugging code in previous commit ...
git-svn-id: https://plugins.svn.wordpress.org/postgresql-for-wordpress/trunk@436142 b8457f37-d9ea-0310-8a92-e5e31aec5664
2011-09-10 22:14:28 +00:00
hawk__
5b7a8973df Modified the method for counting rows as mysql counts avery rows ignoring the limit clause
git-svn-id: https://plugins.svn.wordpress.org/postgresql-for-wordpress/trunk@436140 b8457f37-d9ea-0310-8a92-e5e31aec5664
2011-09-10 22:11:30 +00:00
hawk__
79a3ad03ae Modified the way install/upgrade code is detected
git-svn-id: https://plugins.svn.wordpress.org/postgresql-for-wordpress/trunk@429282 b8457f37-d9ea-0310-8a92-e5e31aec5664
2011-08-27 00:32:14 +00:00
hawk__
e0f6734b01 Changed the way $wpdb is used to avoid some cases were it would be used undefined
git-svn-id: https://plugins.svn.wordpress.org/postgresql-for-wordpress/trunk@429271 b8457f37-d9ea-0310-8a92-e5e31aec5664
2011-08-26 23:12:33 +00:00
hawk__
2ed7e56337 Added a handler for "SET NAMES ... COLLATE ..."
git-svn-id: https://plugins.svn.wordpress.org/postgresql-for-wordpress/trunk@429260 b8457f37-d9ea-0310-8a92-e5e31aec5664
2011-08-26 21:57:44 +00:00
hawk__
57879ef3ba Removed all references to ZdMultilang hacks
Added YEAR and MONTH to 'INTERVAL...' handling
Added a handle for correct counting of users and roles

git-svn-id: https://plugins.svn.wordpress.org/postgresql-for-wordpress/trunk@428351 b8457f37-d9ea-0310-8a92-e5e31aec5664
2011-08-24 20:57:55 +00:00
hawk__
2c552ff24b Prepare for tagging 1.2.0rc
git-svn-id: https://plugins.svn.wordpress.org/postgresql-for-wordpress/trunk@425588 b8457f37-d9ea-0310-8a92-e5e31aec5664
2011-08-18 21:38:17 +00:00
hawk__
02af2b1747 Corrected the pattern for matching UNIX_TIMESTAMP(....)
git-svn-id: https://plugins.svn.wordpress.org/postgresql-for-wordpress/trunk@424297 b8457f37-d9ea-0310-8a92-e5e31aec5664
2011-08-16 16:04:10 +00:00
hawk__
bd2a5978df Disabled all ZdMultilang support Hacks
git-svn-id: https://plugins.svn.wordpress.org/postgresql-for-wordpress/trunk@423850 b8457f37-d9ea-0310-8a92-e5e31aec5664
2011-08-15 15:58:27 +00:00
hawk__
95d3ee9db3 Fixed category listing
git-svn-id: https://plugins.svn.wordpress.org/postgresql-for-wordpress/trunk@422045 b8457f37-d9ea-0310-8a92-e5e31aec5664
2011-08-11 08:10:29 +00:00
hawk__
48f77e760c Get the server version when connecting, will be used later
git-svn-id: https://plugins.svn.wordpress.org/postgresql-for-wordpress/trunk@419934 b8457f37-d9ea-0310-8a92-e5e31aec5664
2011-08-05 22:43:58 +00:00
hawk__
bd6e71204a Rewrote database connection handling so that Wordpress installation can now tell you if your username and password are wrong.
Added support for connecting without a password but requiring PG4WP_INSECURE to be set to true.

git-svn-id: https://plugins.svn.wordpress.org/postgresql-for-wordpress/trunk@419913 b8457f37-d9ea-0310-8a92-e5e31aec5664
2011-08-05 21:55:31 +00:00
hawk__
d9d576aa99 Changed SQL_CALC_FOUND_ROWS handling
git-svn-id: https://plugins.svn.wordpress.org/postgresql-for-wordpress/trunk@419551 b8457f37-d9ea-0310-8a92-e5e31aec5664
2011-08-04 23:01:39 +00:00
hawk__
254f793473 Update the version returned by wpsql_get_server_info() to '5.0.30'
git-svn-id: https://plugins.svn.wordpress.org/postgresql-for-wordpress/trunk@419541 b8457f37-d9ea-0310-8a92-e5e31aec5664
2011-08-04 22:24:02 +00:00
hawk__
7b9a6a8273 Corrected table prefixing, $table_prefix has been deprecated a long time ago
git-svn-id: https://plugins.svn.wordpress.org/postgresql-for-wordpress/trunk@419539 b8457f37-d9ea-0310-8a92-e5e31aec5664
2011-08-04 22:11:49 +00:00
hawk__
1a05e62dac The required handling code wasn't loaded in some cases when a plugin created his own tables in the database
git-svn-id: https://plugins.svn.wordpress.org/postgresql-for-wordpress/trunk@418968 b8457f37-d9ea-0310-8a92-e5e31aec5664
2011-08-03 21:30:21 +00:00
hawk__
0f00a46d2a More specific handling of "comment_ID" badly written from Akismet
git-svn-id: https://plugins.svn.wordpress.org/postgresql-for-wordpress/trunk@418105 b8457f37-d9ea-0310-8a92-e5e31aec5664
2011-08-02 00:11:18 +00:00
hawk__
959263d68d git-svn-id: https://plugins.svn.wordpress.org/postgresql-for-wordpress/trunk@418100 b8457f37-d9ea-0310-8a92-e5e31aec5664 2011-08-02 00:00:07 +00:00
hawk__
0ec3dc02f2 Throw an error message when PostgreSQL extension is not loaded into PHP
git-svn-id: https://plugins.svn.wordpress.org/postgresql-for-wordpress/trunk@418091 b8457f37-d9ea-0310-8a92-e5e31aec5664
2011-08-01 23:07:34 +00:00
hawk__
29033b4871 Excluded converting "NULLIF", patch received from Jamie Strachan
git-svn-id: https://plugins.svn.wordpress.org/postgresql-for-wordpress/trunk@418089 b8457f37-d9ea-0310-8a92-e5e31aec5664
2011-08-01 22:42:10 +00:00
hawk__
7e63ec4e1c Corrected users listing error
git-svn-id: https://plugins.svn.wordpress.org/postgresql-for-wordpress/trunk@418088 b8457f37-d9ea-0310-8a92-e5e31aec5664
2011-08-01 22:34:09 +00:00
hawk__
a51d5b5532 Corrections for WP 3.1+ support
git-svn-id: https://plugins.svn.wordpress.org/postgresql-for-wordpress/trunk@418075 b8457f37-d9ea-0310-8a92-e5e31aec5664
2011-08-01 21:43:06 +00:00
hawk__
fc3fa76f97 Added special handling for latest term_id insertion retrieval
git-svn-id: https://plugins.svn.wordpress.org/postgresql-for-wordpress/trunk@418060 b8457f37-d9ea-0310-8a92-e5e31aec5664
2011-08-01 21:05:30 +00:00
hawk__
bd44178bd5 Moved Insert table name catching for insert ID retrieving to work properly
git-svn-id: https://plugins.svn.wordpress.org/postgresql-for-wordpress/trunk@418055 b8457f37-d9ea-0310-8a92-e5e31aec5664
2011-08-01 20:48:51 +00:00