Skip to content

Commit

Permalink
Merge remote-tracking branch 'sequelpro/master'
Browse files Browse the repository at this point in the history
  • Loading branch information
abhibeckert committed Feb 17, 2017
2 parents 357468e + d2b1a5b commit 0de6f37
Show file tree
Hide file tree
Showing 21 changed files with 893 additions and 145 deletions.
29 changes: 14 additions & 15 deletions Frameworks/PostgresKit/README → Frameworks/PostgresKit/README.md
Original file line number Diff line number Diff line change
@@ -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.
Expand All @@ -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
Expand All @@ -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
Expand Down
26 changes: 26 additions & 0 deletions Frameworks/SPMySQLFramework/LICENSE
Original file line number Diff line number Diff line change
@@ -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.
43 changes: 43 additions & 0 deletions Frameworks/SPMySQLFramework/README.md
Original file line number Diff line number Diff line change
@@ -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.

69 changes: 0 additions & 69 deletions Frameworks/SPMySQLFramework/Readme.txt

This file was deleted.

1 change: 1 addition & 0 deletions Frameworks/SPMySQLFramework/Source/SPMySQL Private APIs.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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++;
}
}

Expand Down
2 changes: 0 additions & 2 deletions Resources/Plists/PreferenceDefaults.plist
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand Down
10 changes: 9 additions & 1 deletion Source/SPAppController.m
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down
12 changes: 12 additions & 0 deletions Source/SPConnectionController.m
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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)
{
Expand Down
4 changes: 4 additions & 0 deletions Source/SPConstants.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions Source/SPConstants.m
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@
NSString *SPHTMLPrintTemplate = @"SPPrintTemplate";
NSString *SPHTMLTableInfoPrintTemplate = @"SPTableInfoPrintTemplate";
NSString *SPHTMLHelpTemplate = @"SPMySQLHelpTemplate";
NSString *SPPreferenceDefaultsFile = @"PreferenceDefaults";

// Folder names
NSString *SPThemesSupportFolder = @"Themes";
Expand Down
Loading

0 comments on commit 0de6f37

Please sign in to comment.