diff options
author | Abhi Beckert <me@abhibeckert.com> | 2017-02-17 14:13:22 +1000 |
---|---|---|
committer | Abhi Beckert <me@abhibeckert.com> | 2017-02-17 14:13:22 +1000 |
commit | 0de6f372e1fe9723d01f9e73a75efe4930b68937 (patch) | |
tree | c0e1f1d253bb0472e7138ae27fc273ce9723cb30 /Frameworks | |
parent | 357468e4c570a48dac02b946532c976a7dd88e0c (diff) | |
parent | d2b1a5b84cb295eba8617f7e80681e0eeca46f0d (diff) | |
download | sequelpro-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/LICENSE | 26 | ||||
-rw-r--r-- | Frameworks/SPMySQLFramework/README.md | 43 | ||||
-rw-r--r-- | Frameworks/SPMySQLFramework/Readme.txt | 69 | ||||
-rw-r--r-- | Frameworks/SPMySQLFramework/Source/SPMySQL Private APIs.h | 1 | ||||
-rw-r--r-- | Frameworks/SPMySQLFramework/Source/SPMySQLConnection Categories/Max Packet Size.m | 67 |
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++; } } |