From 5544489096885e4e4be1ab6e54160caaa44c03dc Mon Sep 17 00:00:00 2001 From: stuconnolly Date: Fri, 4 May 2012 14:36:30 +0000 Subject: Add initial support of moving views when renaming a database. Currently not hooked up yet. Part of issue #1235. --- Source/SPViewCopy.m | 90 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 Source/SPViewCopy.m (limited to 'Source/SPViewCopy.m') diff --git a/Source/SPViewCopy.m b/Source/SPViewCopy.m new file mode 100644 index 00000000..b7fde195 --- /dev/null +++ b/Source/SPViewCopy.m @@ -0,0 +1,90 @@ +// +// $Id$ +// +// SPViewCopy.m +// Sequel Pro +// +// Created by Stuart Connolly (stuconnolly.com) on May 3, 2012 +// Copyright (c) 2012 Stuart Connolly. 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 +// 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. +// +// More info at + +#import "SPDBActionCommons.h" +#import "SPViewCopy.h" + +#import + +@interface SPViewCopy () + +- (NSString *)_createViewStatementFor:(NSString *)view inDatabase:(NSString *)sourceDatabase; + +@end + +@implementation SPViewCopy + +- (BOOL)moveView:(NSString *)view from:(NSString *)sourceDatabase to:(NSString *)targetDatabase +{ + NSMutableString *createStatement = [[NSMutableString alloc] initWithString:[self _createViewStatementFor:view inDatabase:sourceDatabase]]; + + NSString *search = [NSString stringWithFormat:@"VIEW %@", [view backtickQuotedString]]; + + NSRange range = [createStatement rangeOfString:search]; + + if (range.location != NSNotFound) { + + NSUInteger replaced = [createStatement replaceOccurrencesOfString:search withString:[NSString stringWithFormat:@"VIEW %@.%@", [targetDatabase backtickQuotedString], [view backtickQuotedString]] options:0 range:range]; + + if (replaced != 1) return NO; + + // Replace all occurrences of the old database name + [createStatement replaceOccurrencesOfString:[sourceDatabase backtickQuotedString] + withString:[targetDatabase backtickQuotedString] + options:0 + range:NSMakeRange(0, [createStatement length])]; + + [connection queryString:createStatement]; + + [createStatement release]; + + return ![connection queryErrored]; + } + + [createStatement release]; + + return NO; +} + +#pragma mark - +#pragma mark Private API + +- (NSString *)_createViewStatementFor:(NSString *)view inDatabase:(NSString *)sourceDatabase +{ + NSString *createStatement = [NSString stringWithFormat:@"SHOW CREATE VIEW %@.%@", [sourceDatabase backtickQuotedString], [view backtickQuotedString]]; + + SPMySQLResult *theResult = [connection queryString:createStatement]; + + return [theResult numberOfRows] > 0 ? [[theResult getRowAsArray] objectAtIndex:1] : @""; +} + +@end -- cgit v1.2.3