aboutsummaryrefslogtreecommitdiffstats
path: root/Source/SPFieldEditorController.m
diff options
context:
space:
mode:
authorAbhi Beckert <me@abhibeckert.com>2017-02-17 14:13:22 +1000
committerAbhi Beckert <me@abhibeckert.com>2017-02-17 14:13:22 +1000
commit0de6f372e1fe9723d01f9e73a75efe4930b68937 (patch)
treec0e1f1d253bb0472e7138ae27fc273ce9723cb30 /Source/SPFieldEditorController.m
parent357468e4c570a48dac02b946532c976a7dd88e0c (diff)
parentd2b1a5b84cb295eba8617f7e80681e0eeca46f0d (diff)
downloadsequelpro-0de6f372e1fe9723d01f9e73a75efe4930b68937.tar.gz
sequelpro-0de6f372e1fe9723d01f9e73a75efe4930b68937.tar.bz2
sequelpro-0de6f372e1fe9723d01f9e73a75efe4930b68937.zip
Merge remote-tracking branch 'sequelpro/master'
Diffstat (limited to 'Source/SPFieldEditorController.m')
-rw-r--r--Source/SPFieldEditorController.m30
1 files changed, 26 insertions, 4 deletions
diff --git a/Source/SPFieldEditorController.m b/Source/SPFieldEditorController.m
index 8c5c72ae..0298973d 100644
--- a/Source/SPFieldEditorController.m
+++ b/Source/SPFieldEditorController.m
@@ -37,6 +37,7 @@
#include <objc/objc-runtime.h>
#import "SPCustomQuery.h"
#import "SPTableContent.h"
+#import "SPJSONFormatter.h"
#import <SPMySQL/SPMySQL.h>
@@ -195,6 +196,7 @@ typedef enum {
}
#endif
+ [self setEditedFieldInfo:nil];
if ( sheetEditData ) SPClear(sheetEditData);
#ifndef SP_CODA
if ( qlTypes ) SPClear(qlTypes);
@@ -237,6 +239,7 @@ typedef enum {
callerInstance = sender;
_isGeometry = ([[fieldType uppercaseString] isEqualToString:@"GEOMETRY"]) ? YES : NO;
+ _isJSON = ([[fieldType uppercaseString] isEqualToString:SPMySQLJsonType]);
// Set field label
NSMutableString *label = [NSMutableString string];
@@ -249,7 +252,8 @@ typedef enum {
if ([fieldType length])
[label appendString:fieldType];
- if (maxTextLength > 0)
+ //skip length for JSON type since it's a constant and MySQL doesn't display it either
+ if (maxTextLength > 0 && !_isJSON)
[label appendFormat:@"(%lld) ", maxTextLength];
if (!_allowNULL)
@@ -352,7 +356,8 @@ typedef enum {
encoding = anEncoding;
- _isBlob = isFieldBlob;
+ // we don't want the hex/image controls for JSON
+ _isBlob = (!_isJSON && isFieldBlob);
BOOL isBinary = ([[fieldType uppercaseString] isEqualToString:@"BINARY"] || [[fieldType uppercaseString] isEqualToString:@"VARBINARY"]);
@@ -442,7 +447,18 @@ typedef enum {
[editTextScrollView setHidden:NO];
}
else {
- stringValue = [sheetEditData retain];
+ // If the input is a JSON type column we can format it.
+ // Since MySQL internally stores JSON in binary, it does not retain any formatting
+ do {
+ if(_isJSON) {
+ NSString *formatted = [SPJSONFormatter stringByFormattingString:sheetEditData];
+ if(formatted) {
+ stringValue = [formatted retain];
+ break;
+ }
+ }
+ stringValue = [sheetEditData retain];
+ } while(0);
[hexTextView setString:@""];
@@ -651,6 +667,12 @@ typedef enum {
if(callerInstance) {
id returnData = ( editSheetReturnCode && _isEditable ) ? (_isGeometry) ? [editTextView string] : sheetEditData : nil;
+ //for MySQLs JSON type remove the formatting again, since it won't be stored anyway
+ if(_isJSON) {
+ NSString *unformatted = [SPJSONFormatter stringByUnformattingString:returnData];
+ if(unformatted) returnData = unformatted;
+ }
+
#ifdef SP_CODA /* patch */
if ( [callerInstance isKindOfClass:[SPCustomQuery class]] )
[(SPCustomQuery*)callerInstance processFieldEditorResult:returnData contextInfo:contextInfo];
@@ -1358,7 +1380,7 @@ typedef enum {
if([notification object] == editTextView) {
// Do nothing if user really didn't changed text (e.g. for font size changing return)
if(!editTextViewWasChanged && (editSheetWillBeInitialized
- || (([[[notification object] textStorage] editedRange].length == 0)
+ || (([[[notification object] textStorage] editedRange].location == NSNotFound)
&& ([[[notification object] textStorage] changeInLength] == 0)))) {
// Inform the undo-grouping about the caret movement
selectionChanged = YES;