aboutsummaryrefslogtreecommitdiffstats
path: root/Source/SPDatabaseRename.m
diff options
context:
space:
mode:
authorstuconnolly <stuart02@gmail.com>2012-05-04 14:36:30 +0000
committerstuconnolly <stuart02@gmail.com>2012-05-04 14:36:30 +0000
commit5544489096885e4e4be1ab6e54160caaa44c03dc (patch)
tree52b2201bf491d1e3495d506e7c282b3509e33808 /Source/SPDatabaseRename.m
parent830790b9251a36f3d1290a3f9ead62195d61f00a (diff)
downloadsequelpro-5544489096885e4e4be1ab6e54160caaa44c03dc.tar.gz
sequelpro-5544489096885e4e4be1ab6e54160caaa44c03dc.tar.bz2
sequelpro-5544489096885e4e4be1ab6e54160caaa44c03dc.zip
Add initial support of moving views when renaming a database. Currently not hooked up yet. Part of issue #1235.
Diffstat (limited to 'Source/SPDatabaseRename.m')
-rw-r--r--Source/SPDatabaseRename.m123
1 files changed, 68 insertions, 55 deletions
diff --git a/Source/SPDatabaseRename.m b/Source/SPDatabaseRename.m
index 61186678..85763c7f 100644
--- a/Source/SPDatabaseRename.m
+++ b/Source/SPDatabaseRename.m
@@ -25,95 +25,108 @@
#import "SPDBActionCommons.h"
#import "SPDatabaseRename.h"
#import "SPTableCopy.h"
-#import "SPDatabaseInfo.h"
+#import "SPViewCopy.h"
+#import "SPTablesList.h"
+
#import <SPMySQL/SPMySQL.h>
-@implementation SPDatabaseRename
+@interface SPDatabaseRename ()
-@synthesize dbInfo;
+- (BOOL)_createDatabase:(NSString *)database;
+- (BOOL)_dropDatabase:(NSString *)database;
-- (SPDatabaseInfo *)getDBInfoObject
-{
- if (dbInfo != nil) {
- return dbInfo;
- }
- else {
- dbInfo = [[SPDatabaseInfo alloc] init];
-
- [dbInfo setConnection:[self connection]];
- [dbInfo setMessageWindow:messageWindow];
- }
-
- return dbInfo;
-}
+- (void)_moveTables:(NSArray *)tables fromDatabase:(NSString *)sourceDatabase toDatabase:(NSString *)targetDatabase;
+- (void)_moveViews:(NSArray *)views fromDatabase:(NSString *)sourceDatabase toDatabase:(NSString *)targetDatabase;
-- (BOOL)renameDatabaseFrom:(NSString *)sourceDatabaseName to:(NSString *)targetDatabaseName
-{
- SPDatabaseInfo *databaseInfo = [self getDBInfoObject];
+@end
+
+@implementation SPDatabaseRename
- // Check, whether the source database exists and the target database doesn't.
- NSArray *tables = nil;
+- (BOOL)renameDatabaseFrom:(NSString *)sourceDatabase to:(NSString *)targetDatabase
+{
+ NSArray *tables = nil;
+ NSArray *views = nil;
- BOOL sourceExists = [databaseInfo databaseExists:sourceDatabaseName];
- BOOL targetExists = [databaseInfo databaseExists:targetDatabaseName];
+ // Check, whether the source database exists and the target database doesn't
+ BOOL sourceExists = [[connection databases] containsObject:sourceDatabase];
+ BOOL targetExists = [[connection databases] containsObject:targetDatabase];
if (sourceExists && !targetExists) {
-
- // Retrieve the list of tables/views/funcs/triggers from the source database
- tables = [connection tablesFromDatabase:sourceDatabaseName];
+ tables = [tablesList allTableNames];
+ views = [tablesList allViewNames];
}
else {
return NO;
}
- BOOL success = [self createDatabase:targetDatabaseName];
-
- SPTableCopy *dbActionTableCopy = [[SPTableCopy alloc] init];
-
- [dbActionTableCopy setConnection:connection];
+ BOOL success = [self _createDatabase:targetDatabase];
- for (NSString *currentTable in tables)
- {
- success = [dbActionTableCopy moveTable:currentTable from:sourceDatabaseName to:targetDatabaseName];
- }
+ [self _moveTables:tables fromDatabase:sourceDatabase toDatabase:targetDatabase];
- [dbActionTableCopy release];
-
- tables = [connection tablesFromDatabase:sourceDatabaseName];
+ tables = [connection tablesFromDatabase:sourceDatabase];
if ([tables count] == 0) {
- [self dropDatabase:sourceDatabaseName];
+ [self _dropDatabase:sourceDatabase];
}
return success;
}
-- (BOOL)createDatabase:(NSString *)newDatabaseName
-{
- NSString *createStatement = [NSString stringWithFormat:@"CREATE DATABASE %@", [newDatabaseName backtickQuotedString]];
-
- [connection queryString:createStatement];
+#pragma mark -
+#pragma mark Private API
+
+/**
+ * This method creates a new database.
+ *
+ * @param NSString newDatabaseName name of the new database to be created
+ * @return BOOL YES on success, otherwise NO
+ */
+- (BOOL)_createDatabase:(NSString *)database
+{
+ [connection queryString:[NSString stringWithFormat:@"CREATE DATABASE %@", [database backtickQuotedString]]];
- if ([connection queryErrored]) return NO;
+ return ![connection queryErrored];
+}
+
+/**
+ * This method drops a database.
+ *
+ * @param NSString databaseName name of the database to drop
+ * @return BOOL YES on success, otherwise NO
+ */
+- (BOOL)_dropDatabase:(NSString *)database
+{
+ [connection queryString:[NSString stringWithFormat:@"DROP DATABASE %@", [database backtickQuotedString]]];
- return YES;
+ return ![connection queryErrored];
}
-- (BOOL)dropDatabase:(NSString *)databaseName
+- (void)_moveTables:(NSArray *)tables fromDatabase:(NSString *)sourceDatabase toDatabase:(NSString *)targetDatabase
{
- NSString *dropStatement = [NSString stringWithFormat:@"DROP DATABASE %@", [databaseName backtickQuotedString]];
+ SPTableCopy *dbActionTableCopy = [[SPTableCopy alloc] init];
- [connection queryString:dropStatement];
+ [dbActionTableCopy setConnection:connection];
- if ([connection queryErrored]) return NO;
+ for (NSString *table in tables)
+ {
+ [dbActionTableCopy moveTable:table from:sourceDatabase to:targetDatabase];
+ }
- return YES;
+ [dbActionTableCopy release];
}
-- (void)dealloc
+- (void)_moveViews:(NSArray *)views fromDatabase:(NSString *)sourceDatabase toDatabase:(NSString *)targetDatabase
{
- [dbInfo release], dbInfo = nil;
- [super dealloc];
+ SPViewCopy *dbActionViewCopy = [[SPViewCopy alloc] init];
+
+ [dbActionViewCopy setConnection:connection];
+
+ for (NSString *view in views)
+ {
+ [dbActionViewCopy moveView:view from:sourceDatabase to:targetDatabase];
+ }
+
+ [dbActionViewCopy release];
}
@end