aboutsummaryrefslogtreecommitdiffstats
path: root/Frameworks
diff options
context:
space:
mode:
authorAbhi Beckert <me@abhibeckert.com>2017-02-17 14:13:22 +1000
committerAbhi Beckert <me@abhibeckert.com>2017-02-17 14:13:22 +1000
commit0de6f372e1fe9723d01f9e73a75efe4930b68937 (patch)
treec0e1f1d253bb0472e7138ae27fc273ce9723cb30 /Frameworks
parent357468e4c570a48dac02b946532c976a7dd88e0c (diff)
parentd2b1a5b84cb295eba8617f7e80681e0eeca46f0d (diff)
downloadsequelpro-0de6f372e1fe9723d01f9e73a75efe4930b68937.tar.gz
sequelpro-0de6f372e1fe9723d01f9e73a75efe4930b68937.tar.bz2
sequelpro-0de6f372e1fe9723d01f9e73a75efe4930b68937.zip
Merge remote-tracking branch 'sequelpro/master'
Diffstat (limited to 'Frameworks')
-rw-r--r--Frameworks/PostgresKit/README.md (renamed from Frameworks/PostgresKit/README)29
-rw-r--r--Frameworks/SPMySQLFramework/LICENSE26
-rw-r--r--Frameworks/SPMySQLFramework/README.md43
-rw-r--r--Frameworks/SPMySQLFramework/Readme.txt69
-rw-r--r--Frameworks/SPMySQLFramework/Source/SPMySQL Private APIs.h1
-rw-r--r--Frameworks/SPMySQLFramework/Source/SPMySQLConnection Categories/Max Packet Size.m67
6 files changed, 127 insertions, 108 deletions
diff --git a/Frameworks/PostgresKit/README b/Frameworks/PostgresKit/README.md
index d4cdefea..063dacc4 100644
--- a/Frameworks/PostgresKit/README
+++ b/Frameworks/PostgresKit/README.md
@@ -1,10 +1,9 @@
-POSTGRESKIT README
-------------------
+# PostgresKit
PostgresKit is a fork and heavily modified version of the PostgresClientKit
code from the PostgresKit project:
- http://code.google.com/p/postgres-kit/
+[http://code.google.com/p/postgres-kit/](http://code.google.com/p/postgres-kit/)
PostgresClientKit was originally written by David Thorpe and is licensed under
version 2 of the Apache License.
@@ -12,7 +11,9 @@ version 2 of the Apache License.
This PostgresKit fork was created by Stuart Connolly on July 22, 2012 and
is to be developed as part of the Sequel Pro project:
- http://sequelpro.com/
+[http://sequelpro.com/](http://sequelpro.com/)
+
+## License
Any new code added during it's development is licensed under the MIT license
and is copyrighted by the respective developer and the Sequel Pro team.
@@ -28,7 +29,7 @@ libpq is licensed under The PostgreSQL License and is copyrighted by:
Full license:
- http://www.postgresql.org/about/licence/
+[https://www.postgresql.org/about/licence/](https://www.postgresql.org/about/licence/)
libpqtypes is licensed under the BSD license and is copyrighted by:
@@ -36,14 +37,13 @@ libpqtypes is licensed under the BSD license and is copyrighted by:
Full License:
- http://libpqtypes.esilo.com/pkgdocs.html?file=LICENSE
+[http://libpqtypes.esilo.com/pkgdocs.html?file=LICENSE](http://libpqtypes.esilo.com/pkgdocs.html?file=LICENSE)
The entire framework is dual licensed under both version 2 of the Apache
license and the MIT license. Use of it must carry both of the following
licenses to indicate this:
-
-APACHE 2 LICENSE
+### Apache 2 License
Copyright (c) 2008-2009 David Thorpe, djt@mutablelogic.com
@@ -51,7 +51,7 @@ Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
+[https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0)
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
@@ -59,11 +59,10 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
+### MIT License
-MIT LICENSE
-
-Copyright (c) 2012 Sequel Pro Team. All rights reserved.
-
+Copyright (c) 2017 Sequel Pro Team. All rights reserved.
+
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without
@@ -72,10 +71,10 @@ copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following
conditions:
-
+
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
-
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
diff --git a/Frameworks/SPMySQLFramework/LICENSE b/Frameworks/SPMySQLFramework/LICENSE
new file mode 100644
index 00000000..fe855559
--- /dev/null
+++ b/Frameworks/SPMySQLFramework/LICENSE
@@ -0,0 +1,26 @@
+Copyright (c) 2017 Rowan Beentje (rowan.beent.je) and the Sequel Pro team.
+
+All rights reserved.
+
+http://sequelpro.com/
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
diff --git a/Frameworks/SPMySQLFramework/README.md b/Frameworks/SPMySQLFramework/README.md
new file mode 100644
index 00000000..f65141d0
--- /dev/null
+++ b/Frameworks/SPMySQLFramework/README.md
@@ -0,0 +1,43 @@
+# SPMySQL.framework
+
+The SPMySQL Framework is intended to provide a stable MySQL connection framework, with the ability to run text-based queries and rapidly retrieve result sets with conversion from MySQL data types to Cocoa objects.
+
+SPMySQL.framework has an interface loosely based around that provided by MCPKit by Serge Cohen and Bertrand Mansion ([http://mysql-cocoa.sourceforge.net/](http://mysql-cocoa.sourceforge.net/)), and in particular the heavily modified Sequel Pro version ([http://www.sequelpro.com/](http://www.sequelpro.com/)). It is a full rewrite of the original framework, although it includes code from patches implementing the following Sequel Pro functionality, largely contributed by Hans-Jörg Bibiko, Stuart Connolly, Jakob Egger and Rowan Beentje:
+
+* Connection locking (Jakob et al.)
+* Ping & keepalive (Rowan et al.)
+* Query cancellation (Rowan et al.)
+* Delegate setup (Stuart et al.)
+* SSL support (Rowan et al.)
+* Connection checking (Rowan et al.)
+* Version state (Stuart et al.)
+* Maximum packet size control (Hans et al.)
+* Result multithreading and streaming (Rowan et al.)
+* Improved encoding support & switching (Rowan et al.)
+* Database structure; moved to inside the app (Hans et al.)
+* Query reattempts and error-handling approach (Rowan et al.)
+* Geometry result class (Hans et al.)
+* Connection proxy (Stuart et al.)
+
+## Integration
+
+SPMySQL.framework can be added to your project as a standard Cocoa framework, or the entire project
+can be added as a subproject in Xcode.
+
+To add as a subproject in Xcode:
+
+1. Add the SPMySQL framework's `.xcodeproj` to your current project
+2. Choose an existing target, Get Info, and under direct dependenies add a new dependency. Choose the SPMySQL.framework target from the sub-project.
+3. Expand the subproject to see its child target - SPMySQL.framework. Drag this to the "Link Binary With Libraries" build phase of any targets using the framework.
+4. If you don't have a Copy Frameworks phase, add one; drag the SPMySQL.framework child target to this phase.
+5. In your build settings, add a User Header Search Path; make it a recursive path to the SPMySQL project folder location (for example `${PROJECT_DIR}/Frameworks/SPMySQLFramework`). This should allow you to `#include "SPMySQL.h"` and have everything function.
+
+As a last resort jump onto IRC and join #sequel-pro on irc.freenode.net and any of the
+developers will be more than happy to help you out.
+
+## License
+
+Copyright (c) 2017 Rowan Beentje (rowan.beent.je) & the Sequel Pro team. All rights reserved.
+
+SPMySQLFramework is free and open source software, licensed under [MIT](https://opensource.org/licenses/MIT). See [LICENSE](https://github.com/sequelpro/sequelpro/blob/master/Frameworks/SPMySQLFramework/LICENSE) for full details.
+
diff --git a/Frameworks/SPMySQLFramework/Readme.txt b/Frameworks/SPMySQLFramework/Readme.txt
deleted file mode 100644
index 01e4c4b1..00000000
--- a/Frameworks/SPMySQLFramework/Readme.txt
+++ /dev/null
@@ -1,69 +0,0 @@
-The SPMySQL Framework is intended to provide a stable MySQL connection framework, with the ability
-to run text-based queries and rapidly retrieve result sets with conversion from MySQL data types
-to Cocoa objects.
-
-SPMySQL.framework has an interface loosely based around that provided by MCPKit by Serge Cohen and
-Bertrand Mansion (http://mysql-cocoa.sourceforge.net/), and in particular the heavily modified
-Sequel Pro version (http://www.sequelpro.com/). It is a full rewrite of the original framework,
-although it includes code from patches implementing the following Sequel Pro functionality, largely
-contributed by Hans-Jörg Bibiko, Stuart Connolly, Jakob Egger, and Rowan Beentje:
-
- - Connection locking (Jakob et al)
- - Ping & keepalive (Rowan et al)
- - Query cancellation (Rowan et al)
- - Delegate setup (Stuart et al)
- - SSL support (Rowan et al)
- - Connection checking (Rowan et al)
- - Version state (Stuart et al)
- - Maximum packet size control (Hans et al)
- - Result multithreading and streaming (Rowan et al)
- - Improved encoding support & switching (Rowan et al)
- - Database structure; moved to inside the app (Hans et al)
- - Query reattempts and error-handling approach (Rowan et al)
- - Geometry result class (Hans et al)
- - Connection proxy (Stuart et al)
-
-
-INTEGRATION
-
-SPMySQL.framework can be added to your project as a standard Cocoa framework, or the entire project
-can be added as a subproject in Xcode.
-
-To add as a subproject in Xcode:
-
- 1) Add the SPMySQL framework's .xcodeproj to your current project
- 2) Choose an existing target, Get Info, and under direct dependenies add a new dependency. Choose the SPMySQL.framework target from the sub-project
- 3) Expand the subproject to see its child target - SPMySQL.framework. Drag this to the "Link Binary With Libraries" build phase of any targets using the framework.
- 4) If you don't have a Copy Frameworks phase, add one; drag the SPMySQL.framework child target to this phase.
- 5) In your build settings, add a User Header Search Path; make it a recursive path to the SPMySQL project folder location (for example ${PROJECT_DIR}/Frameworks/SPMySQLFramework). This should allow you to #include "SPMySQL.h" and have everything function.
-
-As a last resort jump onto IRC and join #sequel-pro on irc.freenode.net and any of the
-developers will be more than happy to help you out.
-
-
-LICENSE
-
-Copyright (c) 2012 Rowan Beentje (rowan.beent.je) and the Sequel Pro team.
-
-The SPMySQL framework is offered under the MIT license:
-
-Permission is hereby granted, free of charge, to any person
-obtaining a copy of this software and associated documentation
-files (the "Software"), to deal in the Software without
-restriction, including without limitation the rights to use,
-copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the
-Software is furnished to do so, subject to the following
-conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
diff --git a/Frameworks/SPMySQLFramework/Source/SPMySQL Private APIs.h b/Frameworks/SPMySQLFramework/Source/SPMySQL Private APIs.h
index 1e2a8c14..99daca77 100644
--- a/Frameworks/SPMySQLFramework/Source/SPMySQL Private APIs.h
+++ b/Frameworks/SPMySQLFramework/Source/SPMySQL Private APIs.h
@@ -71,6 +71,7 @@
@interface SPMySQLConnection (Max_Packet_Size_Private_API)
+- (NSInteger)_queryMaxAllowedPacketWithSQL:(NSString *)query resultInColumn:(NSUInteger)colIdx;
- (void)_updateMaxQuerySize;
- (void)_updateMaxQuerySizeEditability;
- (BOOL)_attemptMaxQuerySizeIncreaseTo:(NSUInteger)targetSize;
diff --git a/Frameworks/SPMySQLFramework/Source/SPMySQLConnection Categories/Max Packet Size.m b/Frameworks/SPMySQLFramework/Source/SPMySQLConnection Categories/Max Packet Size.m
index dc453624..76d1dfe7 100644
--- a/Frameworks/SPMySQLFramework/Source/SPMySQLConnection Categories/Max Packet Size.m
+++ b/Frameworks/SPMySQLFramework/Source/SPMySQLConnection Categories/Max Packet Size.m
@@ -93,38 +93,57 @@
@implementation SPMySQLConnection (Max_Packet_Size_Private_API)
/**
- * Update the max_allowed_packet size - the largest supported query size - from the server.
+ * Executes a passed query for max_allowed_packet and returns the resulting number in bytes
+ *
+ * @return -1 => if the query failed
+ * 0 => if the query did not fail, but also did not contain a (valid) result
+ * * => if the query succeeded and the value is a valid integer (NOTE: this may also include -1 and 0)
*/
-- (void)_updateMaxQuerySize
+- (NSInteger)_queryMaxAllowedPacketWithSQL:(NSString *)query resultInColumn:(NSUInteger)colIdx
{
-
- // Determine which query to run based on server version
- NSString *packetQueryString;
- if ([self serverMajorVersion] == 3) {
- packetQueryString = @"SHOW VARIABLES LIKE 'max_allowed_packet'";
- } else {
- packetQueryString = @"SELECT @@global.max_allowed_packet";
- }
-
// Make a standard query to the server to retrieve the information
- SPMySQLResult *result = [self queryString:packetQueryString];
- if(!result) { // query fails on sphinxql
- NSLog(@"Query for max_allowed_packet failed: %@ (%lu) (on %@)", [self lastErrorMessage], [self lastErrorID], [self serverVersionString]);
- return;
+ SPMySQLResult *result = [self queryString:query];
+ if(!result) {
+ NSLog(@"Query (%@) for max_allowed_packet failed: %@ (%lu) (on %@)", query, [self lastErrorMessage], [self lastErrorID], [self serverVersionString]);
+ return -1;
}
[result setReturnDataAsStrings:YES];
// Get the maximum size string
- NSString *maxQuerySizeString = nil;
- if ([self serverMajorVersion] == 3) {
- maxQuerySizeString = [[result getRowAsArray] objectAtIndex:1];
- } else {
- maxQuerySizeString = [[result getRowAsArray] objectAtIndex:0];
- }
+ NSString *maxQuerySizeString = [[result getRowAsArray] objectAtIndex:colIdx];
+
+ NSInteger _maxQuerySize = maxQuerySizeString ? [maxQuerySizeString integerValue] : 0;
- // If a valid size was returned, update the instance variable
- if (maxQuerySizeString) {
- maxQuerySize = (NSUInteger)[maxQuerySizeString integerValue];
+ if(_maxQuerySize == 0)
+ NSLog(@"Query (%@) for max_allowed_packet returned invalid value: %ld (raw value: %@) (on %@)", query, _maxQuerySize, maxQuerySizeString, [self serverVersionString]);
+
+ return _maxQuerySize;
+}
+
+/**
+ * Update the max_allowed_packet size - the largest supported query size - from the server.
+ */
+- (void)_updateMaxQuerySize
+{
+ struct {
+ NSString *sql;
+ NSUInteger col;
+ } queryVariants[] = {
+ { .sql = @"SELECT @@global.max_allowed_packet", .col = 0 }, //works on mysql 4+
+ { .sql = @"SHOW VARIABLES LIKE 'max_allowed_packet'", .col = 1 }, //works on mysql 3, sphinx
+ { .sql = nil, .col = 0 }, //terminator element
+ };
+
+ int i = 0;
+ while(queryVariants[i].sql) {
+ NSInteger _maxQuerySize = [self _queryMaxAllowedPacketWithSQL:queryVariants[i].sql resultInColumn:queryVariants[i].col];
+ //see #2653
+ if(_maxQuerySize >= 34) { // the max_allowed_packet query above has at least 34 bytes, so any value less than that would be nonsense
+ // If a valid size was returned, update the instance variable
+ maxQuerySize = (NSUInteger)_maxQuerySize;
+ return;
+ }
+ i++;
}
}