Skip to content

Commit 1570070

Browse files
committed
Merge branch 'main' into fix/dropdown-chevron-first-open
2 parents c79c94f + e0b9793 commit 1570070

9 files changed

Lines changed: 272 additions & 91 deletions

File tree

CHANGELOG.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1010
### Added
1111

1212
- Confirmation dialogs for deep link queries, connection imports, and pre-connect scripts
13+
- JSON fields in Row Details sidebar now display in a scrollable monospaced text area
14+
15+
### Fixed
16+
17+
- MariaDB JSON columns misdetected as BLOB, showing hex dumps instead of JSON text
18+
19+
### Fixed
20+
21+
- MongoDB Atlas connections failing with "TLS certificate verify failed" due to missing CA bundle
1322

1423
### Fixed
1524

Libs/checksums.sha256

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
064606d4c05f60a73b7bed9574f703d56effde6006a0ada4a660e00e0949bbeb Libs/libbson_arm64.a
2-
0f05902d61adec1359c94f12c9bc7a1ceac86f4b492e2d6c02411a5926a0d728 Libs/libbson_universal.a
3-
2b21d294ed199e46949dfb29d229399d5345c256c39ed07b94a974890fcf5110 Libs/libbson_x86_64.a
4-
0f05902d61adec1359c94f12c9bc7a1ceac86f4b492e2d6c02411a5926a0d728 Libs/libbson.a
1+
36e3a521b8da03bafd0f943c4f3b21c8c573bf9d640c6c9e764c0c3632672849 Libs/libbson_arm64.a
2+
b7716e3f295a54feee85c8771332505be2f9a4a430a088d476d60e358d737c9e Libs/libbson_universal.a
3+
1e502e7fb4edc79639140e18d433a1ed1be2931162daecee71a74d09e9f4c550 Libs/libbson_x86_64.a
4+
b7716e3f295a54feee85c8771332505be2f9a4a430a088d476d60e358d737c9e Libs/libbson.a
55
8d7e31145470a339f4f57930831936db30412393a339598deece6f650214865a Libs/libcassandra_arm64.a
66
9bfd7d7cb4a7ee9823b4c5141e942a8534de63395983388722dc7c98e5d7731e Libs/libcassandra_universal.a
77
7f1d058c77b66273db2b3867103c19f62ed0518fb38611b178ce04029213d5d8 Libs/libcassandra_x86_64.a
@@ -26,10 +26,10 @@ b777f7a42766fb08c8e67b2310c67d2d463d77d3554c6092221c3352778622b2 Libs/libmariad
2626
5326ed729b287ae5dbbcf073aaa70dce29a73c7431e446d5958271af19dac8d8 Libs/libmariadb_universal.a
2727
4f7bbb3d73be178d4211c3bd5b2726b4a12db8b808eaa5212bf8e9eb3c570814 Libs/libmariadb_x86_64.a
2828
5326ed729b287ae5dbbcf073aaa70dce29a73c7431e446d5958271af19dac8d8 Libs/libmariadb.a
29-
8e587e9ed0b4291345f16a647bc7ed2dc30edbee87b9887eef94098d574aac13 Libs/libmongoc_arm64.a
30-
553b6636a37886dd44732dddcb97f6e8192dc1b3fbb914042c8da8a9685ce163 Libs/libmongoc_universal.a
31-
ce569e738c0f62f13906095bc33e10f20d62cd32535db89bc6af6231e86c1632 Libs/libmongoc_x86_64.a
32-
553b6636a37886dd44732dddcb97f6e8192dc1b3fbb914042c8da8a9685ce163 Libs/libmongoc.a
29+
9f4c87916ef65eae43b19d7568dc4fd4dffd884dc0cae15913b90965293339a7 Libs/libmongoc_arm64.a
30+
0d7ddc82dc7327a4b5187ffbc68a1419b5e5ff7b2be7b927e16793eef4d34303 Libs/libmongoc_universal.a
31+
635705c7dc8d689efdee5ec1bd8a8cbd0d09ae20db0869480271a293d492de50 Libs/libmongoc_x86_64.a
32+
0d7ddc82dc7327a4b5187ffbc68a1419b5e5ff7b2be7b927e16793eef4d34303 Libs/libmongoc.a
3333
5dbf2cb5ef37d8adbf607db82461b36a3fd7037c11d891383e6e918378a33d78 Libs/libpgcommon_arm64.a
3434
3ca491a723b9d9dfc13b815659b44a82253b540dd6b115f03ac68c5154ec26db Libs/libpgcommon_universal.a
3535
4bfad7376aefa866d1ed0b7e54966ec6c9d70dcfed928e1311c20321bf08881c Libs/libpgcommon_x86_64.a

Plugins/MongoDBDriverPlugin/CLibMongoc/include/mongoc/mongoc-config.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@
7878
* MONGOC_ENABLE_SSL_SECURE_TRANSPORT is set from configure to determine if we are
7979
* compiled with Native SSL support on Darwin
8080
*/
81-
#define MONGOC_ENABLE_SSL_SECURE_TRANSPORT 0
81+
#define MONGOC_ENABLE_SSL_SECURE_TRANSPORT 1
8282

8383
#if MONGOC_ENABLE_SSL_SECURE_TRANSPORT != 1
8484
# undef MONGOC_ENABLE_SSL_SECURE_TRANSPORT
@@ -89,7 +89,7 @@
8989
* MONGOC_ENABLE_CRYPTO_COMMON_CRYPTO is set from configure to determine if we are
9090
* compiled with Native Crypto support on Darwin
9191
*/
92-
#define MONGOC_ENABLE_CRYPTO_COMMON_CRYPTO 0
92+
#define MONGOC_ENABLE_CRYPTO_COMMON_CRYPTO 1
9393

9494
#if MONGOC_ENABLE_CRYPTO_COMMON_CRYPTO != 1
9595
# undef MONGOC_ENABLE_CRYPTO_COMMON_CRYPTO
@@ -111,7 +111,7 @@
111111
* MONGOC_ENABLE_SSL_OPENSSL is set from configure to determine if we are
112112
* compiled with OpenSSL support.
113113
*/
114-
#define MONGOC_ENABLE_SSL_OPENSSL 1
114+
#define MONGOC_ENABLE_SSL_OPENSSL 0
115115

116116
#if MONGOC_ENABLE_SSL_OPENSSL != 1
117117
# undef MONGOC_ENABLE_SSL_OPENSSL
@@ -122,7 +122,7 @@
122122
* MONGOC_ENABLE_CRYPTO_LIBCRYPTO is set from configure to determine if we are
123123
* compiled with OpenSSL support.
124124
*/
125-
#define MONGOC_ENABLE_CRYPTO_LIBCRYPTO 1
125+
#define MONGOC_ENABLE_CRYPTO_LIBCRYPTO 0
126126

127127
#if MONGOC_ENABLE_CRYPTO_LIBCRYPTO != 1
128128
# undef MONGOC_ENABLE_CRYPTO_LIBCRYPTO
@@ -164,7 +164,7 @@
164164
/*
165165
* Use ASN1_STRING_get0_data () rather than the deprecated ASN1_STRING_data
166166
*/
167-
#define MONGOC_HAVE_ASN1_STRING_GET0_DATA 1
167+
#define MONGOC_HAVE_ASN1_STRING_GET0_DATA 0
168168

169169
#if MONGOC_HAVE_ASN1_STRING_GET0_DATA != 1
170170
# undef MONGOC_HAVE_ASN1_STRING_GET0_DATA
@@ -338,7 +338,7 @@
338338
* Set if we have zstd compression support
339339
*
340340
*/
341-
#define MONGOC_ENABLE_COMPRESSION_ZSTD 1
341+
#define MONGOC_ENABLE_COMPRESSION_ZSTD 0
342342

343343
#if MONGOC_ENABLE_COMPRESSION_ZSTD != 1
344344
# undef MONGOC_ENABLE_COMPRESSION_ZSTD

Plugins/MySQLDriverPlugin/MariaDBPluginConnection.swift

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,11 @@ import Foundation
1111
import OSLog
1212
import TableProPluginKit
1313

14-
// MySQL/MariaDB field flag constants
15-
private let mysqlBinaryFlag: UInt = 0x0080 // 128
16-
private let mysqlEnumFlag: UInt = 0x0100 // 256
17-
private let mysqlSetFlag: UInt = 0x0800 // 2048
14+
// MySQL/MariaDB field flag and charset constants
15+
private let mysqlBinaryFlag: UInt = 0x0080
16+
private let mysqlEnumFlag: UInt = 0x0100
17+
private let mysqlSetFlag: UInt = 0x0800
18+
private let mysqlBinaryCharset: UInt32 = 63
1819

1920
private let logger = Logger(subsystem: "com.TablePro", category: "MariaDBPluginConnection")
2021

@@ -72,13 +73,27 @@ struct MySQLSSLConfig {
7273

7374
// MARK: - Type Mapping
7475

75-
func mysqlTypeToString(_ type: UInt32, length: UInt, flags: UInt) -> String {
76+
func mysqlTypeToString(_ fieldPtr: UnsafePointer<MYSQL_FIELD>) -> String {
77+
let field = fieldPtr.pointee
78+
let flags = UInt(field.flags)
79+
let length = field.length
80+
81+
// MariaDB extended metadata: detect JSON stored as LONGTEXT (best-effort)
82+
var attr = MARIADB_CONST_STRING()
83+
if mariadb_field_attr(&attr, fieldPtr, MARIADB_FIELD_ATTR_FORMAT_NAME) == 0,
84+
let str = attr.str, attr.length > 0,
85+
String(cString: str) == "json" {
86+
return "JSON"
87+
}
88+
7689
if (flags & mysqlEnumFlag) != 0 { return "ENUM" }
7790
if (flags & mysqlSetFlag) != 0 { return "SET" }
7891

79-
let isBinary = (flags & mysqlBinaryFlag) != 0
92+
// Binary flag alone is insufficient — MariaDB sets it on text columns with
93+
// binary collation (e.g. utf8mb4_bin for JSON). Only charset 63 is truly binary.
94+
let isBinary = (flags & mysqlBinaryFlag) != 0 && field.charsetnr == mysqlBinaryCharset
8095

81-
switch type {
96+
switch field.type.rawValue {
8297
case 0: return "DECIMAL"
8398
case 1: return "TINYINT"
8499
case 2: return "SMALLINT"
@@ -444,7 +459,7 @@ final class MariaDBPluginConnection: @unchecked Sendable {
444459
if (fieldFlags & mysqlEnumFlag) != 0 { fieldType = 247 }
445460
if (fieldFlags & mysqlSetFlag) != 0 { fieldType = 248 }
446461
columnTypes.append(fieldType)
447-
columnTypeNames.append(mysqlTypeToString(fieldType, length: field.length, flags: fieldFlags))
462+
columnTypeNames.append(mysqlTypeToString(fields + i))
448463
}
449464
}
450465

@@ -749,7 +764,7 @@ final class MariaDBPluginConnection: @unchecked Sendable {
749764
if (fieldFlags & mysqlEnumFlag) != 0 { fieldType = 247 }
750765
if (fieldFlags & mysqlSetFlag) != 0 { fieldType = 248 }
751766
columnTypes.append(fieldType)
752-
columnTypeNames.append(mysqlTypeToString(fieldType, length: field.length, flags: fieldFlags))
767+
columnTypeNames.append(mysqlTypeToString(fields + i))
753768
}
754769
}
755770

TablePro.xcodeproj/project.pbxproj

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2477,8 +2477,10 @@
24772477
"$(PROJECT_DIR)/Libs/libmongoc.a",
24782478
"-force_load",
24792479
"$(PROJECT_DIR)/Libs/libbson.a",
2480-
"-lssl",
2481-
"-lcrypto",
2480+
"-framework",
2481+
Security,
2482+
"-framework",
2483+
CoreFoundation,
24822484
"-lresolv",
24832485
"-lz",
24842486
);
@@ -2517,8 +2519,10 @@
25172519
"$(PROJECT_DIR)/Libs/libmongoc.a",
25182520
"-force_load",
25192521
"$(PROJECT_DIR)/Libs/libbson.a",
2520-
"-lssl",
2521-
"-lcrypto",
2522+
"-framework",
2523+
Security,
2524+
"-framework",
2525+
CoreFoundation,
25222526
"-lresolv",
25232527
"-lz",
25242528
);

TablePro/Core/Plugins/PluginManager.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1004,6 +1004,7 @@ final class PluginManager {
10041004
replaceExistingPlugin(bundleId: newBundleId)
10051005

10061006
let fm = FileManager.default
1007+
try fm.createDirectory(at: userPluginsDir, withIntermediateDirectories: true)
10071008
let destURL = userPluginsDir.appendingPathComponent(url.lastPathComponent)
10081009

10091010
if url.standardizedFileURL != destURL.standardizedFileURL {
@@ -1075,6 +1076,7 @@ final class PluginManager {
10751076

10761077
replaceExistingPlugin(bundleId: newBundleId)
10771078

1079+
try fm.createDirectory(at: userPluginsDir, withIntermediateDirectories: true)
10781080
let destURL = userPluginsDir.appendingPathComponent(extracted.lastPathComponent)
10791081

10801082
if fm.fileExists(atPath: destURL.path) {

TablePro/Views/RightSidebar/EditableFieldView.swift

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -375,6 +375,14 @@ struct ReadOnlyFieldView: View {
375375
.frame(maxWidth: .infinity, alignment: .topLeading)
376376
}
377377
.frame(maxHeight: 120)
378+
} else if columnTypeEnum.isJsonType {
379+
ScrollView {
380+
Text(value)
381+
.font(.system(size: ThemeEngine.shared.activeTheme.typography.small, design: .monospaced))
382+
.textSelection(.enabled)
383+
.frame(maxWidth: .infinity, alignment: .topLeading)
384+
}
385+
.frame(maxHeight: 200)
378386
} else if isLongText {
379387
Text(value)
380388
.font(.system(size: ThemeEngine.shared.activeTheme.typography.small, design: .monospaced))

0 commit comments

Comments
 (0)