Permalink
Browse files

Merge remote-tracking branch 'sequelpro/master'

  • Loading branch information...
abhibeckert committed Feb 17, 2017
2 parents 357468e + d2b1a5b commit 0de6f372e1fe9723d01f9e73a75efe4930b68937
@@ -1,18 +1,19 @@
-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.
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,42 +29,40 @@ 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:
Copyright (c) 2008-2011 eSilo, LLC. All rights reserved
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
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,
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
@@ -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.
@@ -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.
+
@@ -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.
@@ -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;
@@ -93,38 +93,57 @@ - (NSUInteger)setGlobalMaxQuerySize:(NSUInteger)newMaxSize
@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++;
}
}
@@ -127,8 +127,6 @@
<false/>
<key>FilterTableDefaultOperator</key>
<string>LIKE &apos;%@%&apos;</string>
- <key>GlobalResultTableFont</key>
- <data>BAtzdHJlYW10eXBlZIHoA4QBQISEhAZOU0ZvbnQehIQITlNPYmplY3QAhYQBaSSEBVszNmNdBgAAABoAAAD//kwAdQBjAGkAZABhAEcAcgBhAG4AZABlAAAAhAFmC4QBYwCYAZgAmACG</data>
<key>GrowlEnabled</key>
<true/>
<key>KeepAliveInterval</key>
View
@@ -104,8 +104,16 @@ - (id)init
*/
+ (void)initialize
{
+ NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
+
+ NSMutableDictionary *preferenceDefaults = [NSMutableDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:SPPreferenceDefaultsFile ofType:@"plist"]];
+
+ if (![prefs objectForKey:SPGlobalResultTableFont]) {
+ [preferenceDefaults setObject:[NSArchiver archivedDataWithRootObject:[NSFont systemFontOfSize:11]] forKey:SPGlobalResultTableFont];
+ }
+
// Register application defaults
- [[NSUserDefaults standardUserDefaults] registerDefaults:[NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"PreferenceDefaults" ofType:@"plist"]]];
+ [prefs registerDefaults:preferenceDefaults];
// Upgrade prefs before any other parts of the app pick up on the values
SPApplyRevisionChanges();
@@ -71,6 +71,14 @@ - (void)setShowsHiddenFiles:(BOOL)flag;
@end
#endif
+#if __MAC_OS_X_VERSION_MAX_ALLOWED < __MAC_10_11
+@interface NSOpenPanel (NSOpenPanel_ElCaptian)
+
+@property (getter=isAccessoryViewDisclosed) BOOL accessoryViewDisclosed;
+
+@end
+#endif
+
/**
* This is a utility function to validate SSL key/certificate files
* @param fileData The contents of the file
@@ -468,6 +476,10 @@ - (IBAction)chooseKeyLocation:(NSButton *)sender
keySelectionPanel = [[NSOpenPanel openPanel] retain]; // retain/release needed on OS X ≤ 10.6 according to Apple doc
[keySelectionPanel setShowsHiddenFiles:[prefs boolForKey:SPHiddenKeyFileVisibilityKey]];
[keySelectionPanel setAccessoryView:accessoryView];
+ //on os x 10.11+ the accessory view will be hidden by default and has to be made visible
+ if(accessoryView && [keySelectionPanel respondsToSelector:@selector(setAccessoryViewDisclosed:)]) {
+ [keySelectionPanel setAccessoryViewDisclosed:YES];
+ }
[keySelectionPanel setDelegate:self];
[keySelectionPanel beginSheetModalForWindow:[dbDocument parentWindow] completionHandler:^(NSInteger returnCode)
{
View
@@ -274,6 +274,7 @@ extern NSString *SPFavoritesDataFile;
extern NSString *SPHTMLPrintTemplate;
extern NSString *SPHTMLTableInfoPrintTemplate;
extern NSString *SPHTMLHelpTemplate;
+extern NSString *SPPreferenceDefaultsFile;
// SPF file types
extern NSString *SPFExportSettingsContentType;
@@ -674,6 +675,9 @@ void _SPClear(id *addr);
#ifndef __MAC_10_10
#define __MAC_10_10 101000
#endif
+#ifndef __MAC_10_11
+#define __MAC_10_11 101100
+#endif
// This enum is available since 10.5 but only got a "name" in 10.10
#if __MAC_OS_X_VERSION_MAX_ALLOWED < __MAC_10_10
View
@@ -67,6 +67,7 @@
NSString *SPHTMLPrintTemplate = @"SPPrintTemplate";
NSString *SPHTMLTableInfoPrintTemplate = @"SPTableInfoPrintTemplate";
NSString *SPHTMLHelpTemplate = @"SPMySQLHelpTemplate";
+NSString *SPPreferenceDefaultsFile = @"PreferenceDefaults";
// Folder names
NSString *SPThemesSupportFolder = @"Themes";
Oops, something went wrong.

0 comments on commit 0de6f37

Please sign in to comment.