Skip to content

Commit 788edb7

Browse files
author
rstam
committed
CSHARP-694: Added ReadEncoding and WriteEncoding to MongoClientSettings also.
1 parent 7da4d53 commit 788edb7

File tree

6 files changed

+68
-8
lines changed

6 files changed

+68
-8
lines changed

MongoDB.Driver/Communication/MongoConnection.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
using System.Net.Sockets;
2020
using System.Security.Authentication;
2121
using System.Security.Cryptography.X509Certificates;
22+
using System.Text;
2223
using MongoDB.Bson;
2324
using MongoDB.Bson.IO;
2425
using MongoDB.Bson.Serialization;
@@ -253,6 +254,7 @@ internal CommandResult RunCommand(
253254

254255
var writerSettings = new BsonBinaryWriterSettings
255256
{
257+
Encoding = _serverInstance.Settings.WriteEncoding ?? new UTF8Encoding(false, true),
256258
GuidRepresentation = GuidRepresentation.Unspecified,
257259
MaxDocumentSize = _serverInstance.MaxDocumentSize
258260
};
@@ -262,6 +264,7 @@ internal CommandResult RunCommand(
262264

263265
var readerSettings = new BsonBinaryReaderSettings
264266
{
267+
Encoding = _serverInstance.Settings.ReadEncoding ?? new UTF8Encoding(false, true),
265268
GuidRepresentation = GuidRepresentation.Unspecified,
266269
MaxDocumentSize = _serverInstance.MaxDocumentSize
267270
};
@@ -367,6 +370,7 @@ internal WriteConcernResult SendMessage(BsonBuffer buffer, MongoRequestMessage m
367370
{
368371
var readerSettings = new BsonBinaryReaderSettings
369372
{
373+
Encoding = _serverInstance.Settings.ReadEncoding ?? new UTF8Encoding(false, true),
370374
GuidRepresentation = message.WriterSettings.GuidRepresentation,
371375
MaxDocumentSize = _serverInstance.MaxDocumentSize
372376
};

MongoDB.Driver/MongoClientSettings.cs

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ public class MongoClientSettings : IEquatable<MongoClientSettings>
3838
private TimeSpan _maxConnectionLifeTime;
3939
private int _maxConnectionPoolSize;
4040
private int _minConnectionPoolSize;
41+
private UTF8Encoding _readEncoding;
4142
private ReadPreference _readPreference;
4243
private string _replicaSetName;
4344
private TimeSpan _secondaryAcceptableLatency;
@@ -49,6 +50,7 @@ public class MongoClientSettings : IEquatable<MongoClientSettings>
4950
private int _waitQueueSize;
5051
private TimeSpan _waitQueueTimeout;
5152
private WriteConcern _writeConcern;
53+
private UTF8Encoding _writeEncoding;
5254

5355
// the following fields are set when Freeze is called
5456
private bool _isFrozen;
@@ -70,6 +72,7 @@ public MongoClientSettings()
7072
_maxConnectionLifeTime = MongoDefaults.MaxConnectionLifeTime;
7173
_maxConnectionPoolSize = MongoDefaults.MaxConnectionPoolSize;
7274
_minConnectionPoolSize = MongoDefaults.MinConnectionPoolSize;
75+
_readEncoding = null;
7376
_readPreference = ReadPreference.Primary;
7477
_replicaSetName = null;
7578
_secondaryAcceptableLatency = MongoDefaults.SecondaryAcceptableLatency;
@@ -81,6 +84,7 @@ public MongoClientSettings()
8184
_waitQueueSize = MongoDefaults.ComputedWaitQueueSize;
8285
_waitQueueTimeout = MongoDefaults.WaitQueueTimeout;
8386
_writeConcern = WriteConcern.Acknowledged;
87+
_writeEncoding = null;
8488
}
8589

8690
// public properties
@@ -213,6 +217,19 @@ public int MinConnectionPoolSize
213217
}
214218
}
215219

220+
/// <summary>
221+
/// Gets or sets the Read Encoding.
222+
/// </summary>
223+
public UTF8Encoding ReadEncoding
224+
{
225+
get { return _readEncoding; }
226+
set
227+
{
228+
if (_isFrozen) { throw new InvalidOperationException("MongoClientSettings is frozen."); }
229+
_readEncoding = value;
230+
}
231+
}
232+
216233
/// <summary>
217234
/// Gets or sets the read preferences.
218235
/// </summary>
@@ -386,6 +403,19 @@ public WriteConcern WriteConcern
386403
}
387404
}
388405

406+
/// <summary>
407+
/// Gets or sets the Write Encoding.
408+
/// </summary>
409+
public UTF8Encoding WriteEncoding
410+
{
411+
get { return _writeEncoding; }
412+
set
413+
{
414+
if (_isFrozen) { throw new InvalidOperationException("MongoClientSettings is frozen."); }
415+
_writeEncoding = value;
416+
}
417+
}
418+
389419
// public operators
390420
/// <summary>
391421
/// Determines whether two <see cref="MongoClientSettings"/> instances are equal.
@@ -440,6 +470,7 @@ public static MongoClientSettings FromConnectionStringBuilder(MongoConnectionStr
440470
clientSettings.MaxConnectionLifeTime = builder.MaxConnectionLifeTime;
441471
clientSettings.MaxConnectionPoolSize = builder.MaxConnectionPoolSize;
442472
clientSettings.MinConnectionPoolSize = builder.MinConnectionPoolSize;
473+
clientSettings.ReadEncoding = null; // ReadEncoding must be provided in code
443474
clientSettings.ReadPreference = (builder.ReadPreference == null) ? ReadPreference.Primary : builder.ReadPreference.Clone();
444475
clientSettings.ReplicaSetName = builder.ReplicaSetName;
445476
clientSettings.SecondaryAcceptableLatency = builder.SecondaryAcceptableLatency;
@@ -451,6 +482,7 @@ public static MongoClientSettings FromConnectionStringBuilder(MongoConnectionStr
451482
clientSettings.WaitQueueSize = builder.ComputedWaitQueueSize;
452483
clientSettings.WaitQueueTimeout = builder.WaitQueueTimeout;
453484
clientSettings.WriteConcern = builder.GetWriteConcern(true); // WriteConcern is enabled by default for MongoClient
485+
clientSettings.WriteEncoding = null; // WriteEncoding must be provided in code
454486
return clientSettings;
455487
}
456488

@@ -480,6 +512,7 @@ public static MongoClientSettings FromUrl(MongoUrl url)
480512
clientSettings.MaxConnectionLifeTime = url.MaxConnectionLifeTime;
481513
clientSettings.MaxConnectionPoolSize = url.MaxConnectionPoolSize;
482514
clientSettings.MinConnectionPoolSize = url.MinConnectionPoolSize;
515+
clientSettings.ReadEncoding = null; // ReadEncoding must be provided in code
483516
clientSettings.ReadPreference = (url.ReadPreference == null) ? ReadPreference.Primary : url.ReadPreference;
484517
clientSettings.ReplicaSetName = url.ReplicaSetName;
485518
clientSettings.SecondaryAcceptableLatency = url.SecondaryAcceptableLatency;
@@ -491,6 +524,7 @@ public static MongoClientSettings FromUrl(MongoUrl url)
491524
clientSettings.WaitQueueSize = url.ComputedWaitQueueSize;
492525
clientSettings.WaitQueueTimeout = url.WaitQueueTimeout;
493526
clientSettings.WriteConcern = url.GetWriteConcern(true); // WriteConcern is enabled by default for MongoClient
527+
clientSettings.WriteEncoding = null; // WriteEncoding must be provided in code
494528
return clientSettings;
495529
}
496530

@@ -511,6 +545,7 @@ public MongoClientSettings Clone()
511545
clone._maxConnectionLifeTime = _maxConnectionLifeTime;
512546
clone._maxConnectionPoolSize = _maxConnectionPoolSize;
513547
clone._minConnectionPoolSize = _minConnectionPoolSize;
548+
clone._readEncoding = _readEncoding;
514549
clone._readPreference = _readPreference.Clone();
515550
clone._replicaSetName = _replicaSetName;
516551
clone._secondaryAcceptableLatency = _secondaryAcceptableLatency;
@@ -522,6 +557,7 @@ public MongoClientSettings Clone()
522557
clone._waitQueueSize = _waitQueueSize;
523558
clone._waitQueueTimeout = _waitQueueTimeout;
524559
clone._writeConcern = _writeConcern.Clone();
560+
clone._writeEncoding = _writeEncoding;
525561
return clone;
526562
}
527563

@@ -558,6 +594,7 @@ public override bool Equals(object obj)
558594
_maxConnectionLifeTime == rhs._maxConnectionLifeTime &&
559595
_maxConnectionPoolSize == rhs._maxConnectionPoolSize &&
560596
_minConnectionPoolSize == rhs._minConnectionPoolSize &&
597+
object.Equals(_readEncoding, rhs._readEncoding) &&
561598
_readPreference == rhs._readPreference &&
562599
_replicaSetName == rhs._replicaSetName &&
563600
_secondaryAcceptableLatency == rhs._secondaryAcceptableLatency &&
@@ -568,7 +605,8 @@ public override bool Equals(object obj)
568605
_verifySslCertificate == rhs._verifySslCertificate &&
569606
_waitQueueSize == rhs._waitQueueSize &&
570607
_waitQueueTimeout == rhs._waitQueueTimeout &&
571-
_writeConcern == rhs._writeConcern;
608+
_writeConcern == rhs._writeConcern &&
609+
object.Equals(_writeEncoding, rhs._writeEncoding);
572610
}
573611

574612
/// <summary>
@@ -625,6 +663,7 @@ public override int GetHashCode()
625663
.Hash(_maxConnectionLifeTime)
626664
.Hash(_maxConnectionPoolSize)
627665
.Hash(_minConnectionPoolSize)
666+
.Hash(_readEncoding)
628667
.Hash(_readPreference)
629668
.Hash(_replicaSetName)
630669
.Hash(_secondaryAcceptableLatency)
@@ -636,6 +675,7 @@ public override int GetHashCode()
636675
.Hash(_waitQueueSize)
637676
.Hash(_waitQueueTimeout)
638677
.Hash(_writeConcern)
678+
.Hash(_writeEncoding)
639679
.GetHashCode();
640680
}
641681

@@ -660,6 +700,10 @@ public override string ToString()
660700
sb.AppendFormat("MaxConnectionLifeTime={0};", _maxConnectionLifeTime);
661701
sb.AppendFormat("MaxConnectionPoolSize={0};", _maxConnectionPoolSize);
662702
sb.AppendFormat("MinConnectionPoolSize={0};", _minConnectionPoolSize);
703+
if (_readEncoding != null)
704+
{
705+
sb.Append("ReadEncoding=[set]");
706+
}
663707
sb.AppendFormat("ReadPreference={0};", _readPreference);
664708
sb.AppendFormat("ReplicaSetName={0};", _replicaSetName);
665709
sb.AppendFormat("SecondaryAcceptableLatency={0};", _secondaryAcceptableLatency);
@@ -674,6 +718,10 @@ public override string ToString()
674718
sb.AppendFormat("WaitQueueSize={0};", _waitQueueSize);
675719
sb.AppendFormat("WaitQueueTimeout={0}", _waitQueueTimeout);
676720
sb.AppendFormat("WriteConcern={0};", _writeConcern);
721+
if (_writeEncoding != null)
722+
{
723+
sb.Append("WriteEncoding=[set]");
724+
}
677725
return sb.ToString();
678726
}
679727
}

MongoDB.Driver/MongoCollection.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,10 @@ protected MongoCollection(MongoDatabase database, string name, MongoCollectionSe
8181
{
8282
AssignIdOnInsert = false,
8383
GuidRepresentation = _settings.GuidRepresentation,
84+
ReadEncoding = _settings.ReadEncoding,
8485
ReadPreference = _settings.ReadPreference,
85-
WriteConcern = _settings.WriteConcern
86+
WriteConcern = _settings.WriteConcern,
87+
WriteEncoding = _settings.WriteEncoding
8688
};
8789
_commandCollection = _database.GetCollection("$cmd", commandCollectionSettings);
8890
}

MongoDB.Driver/MongoCollectionSettings.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -405,13 +405,13 @@ public override string ToString()
405405
parts.Add(string.Format("GuidRepresentation={0}", _guidRepresentation));
406406
if (_readEncoding.HasBeenSet)
407407
{
408-
parts.Add(string.Format("ReadEncoding=[set]", _readEncoding.Value));
408+
parts.Add("ReadEncoding=[set]");
409409
}
410410
parts.Add(string.Format("ReadPreference={0}", _readPreference));
411411
parts.Add(string.Format("WriteConcern={0}", _writeConcern));
412412
if (_writeEncoding.HasBeenSet)
413413
{
414-
parts.Add(string.Format("WriteEncoding=[set]", _writeEncoding.Value));
414+
parts.Add("WriteEncoding=[set]");
415415
}
416416
return string.Join(";", parts.ToArray());
417417
}

MongoDB.Driver/MongoDatabaseSettings.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -320,13 +320,13 @@ public override string ToString()
320320
parts.Add(string.Format("GuidRepresentation={0}", _guidRepresentation.Value));
321321
if (_readEncoding.HasBeenSet)
322322
{
323-
parts.Add(string.Format("ReadEncoding={0}", _readEncoding.Value));
323+
parts.Add("ReadEncoding=[set]");
324324
}
325325
parts.Add(string.Format("ReadPreference={0}", _readPreference.Value));
326326
parts.Add(string.Format("WriteConcern={0}", _writeConcern.Value));
327327
if (_writeEncoding.HasBeenSet)
328328
{
329-
parts.Add(string.Format("WriteEncoding={0}", _writeEncoding.Value));
329+
parts.Add("WriteEncoding=[set]");
330330
}
331331
return string.Join(";", parts.ToArray());
332332
}

MongoDB.Driver/MongoServerSettings.cs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -509,6 +509,7 @@ public static MongoServerSettings FromClientSettings(MongoClientSettings clientS
509509
serverSettings.MaxConnectionLifeTime = clientSettings.MaxConnectionLifeTime;
510510
serverSettings.MaxConnectionPoolSize = clientSettings.MaxConnectionPoolSize;
511511
serverSettings.MinConnectionPoolSize = clientSettings.MinConnectionPoolSize;
512+
serverSettings.ReadEncoding = clientSettings.ReadEncoding;
512513
serverSettings.ReadPreference = clientSettings.ReadPreference.Clone();
513514
serverSettings.ReplicaSetName = clientSettings.ReplicaSetName;
514515
serverSettings.SecondaryAcceptableLatency = clientSettings.SecondaryAcceptableLatency;
@@ -520,6 +521,7 @@ public static MongoServerSettings FromClientSettings(MongoClientSettings clientS
520521
serverSettings.WaitQueueSize = clientSettings.WaitQueueSize;
521522
serverSettings.WaitQueueTimeout = clientSettings.WaitQueueTimeout;
522523
serverSettings.WriteConcern = clientSettings.WriteConcern.Clone();
524+
serverSettings.WriteEncoding = clientSettings.WriteEncoding;
523525
return serverSettings;
524526
}
525527

@@ -549,6 +551,7 @@ public static MongoServerSettings FromConnectionStringBuilder(MongoConnectionStr
549551
serverSettings.MaxConnectionLifeTime = builder.MaxConnectionLifeTime;
550552
serverSettings.MaxConnectionPoolSize = builder.MaxConnectionPoolSize;
551553
serverSettings.MinConnectionPoolSize = builder.MinConnectionPoolSize;
554+
serverSettings.ReadEncoding = null; // ReadEncoding must be provided in code
552555
serverSettings.ReadPreference = (builder.ReadPreference == null) ? ReadPreference.Primary : builder.ReadPreference.Clone();
553556
serverSettings.ReplicaSetName = builder.ReplicaSetName;
554557
serverSettings.SecondaryAcceptableLatency = builder.SecondaryAcceptableLatency;
@@ -562,6 +565,7 @@ public static MongoServerSettings FromConnectionStringBuilder(MongoConnectionStr
562565
#pragma warning disable 618
563566
serverSettings.WriteConcern = builder.GetWriteConcern(MongoDefaults.SafeMode.Enabled);
564567
#pragma warning restore
568+
serverSettings.WriteEncoding = null; // WriteEncoding must be provided in code
565569
return serverSettings;
566570
}
567571

@@ -591,6 +595,7 @@ public static MongoServerSettings FromUrl(MongoUrl url)
591595
serverSettings.MaxConnectionLifeTime = url.MaxConnectionLifeTime;
592596
serverSettings.MaxConnectionPoolSize = url.MaxConnectionPoolSize;
593597
serverSettings.MinConnectionPoolSize = url.MinConnectionPoolSize;
598+
serverSettings.ReadEncoding = null; // ReadEncoding must be provided in code
594599
serverSettings.ReadPreference = (url.ReadPreference == null) ? ReadPreference.Primary : url.ReadPreference;
595600
serverSettings.ReplicaSetName = url.ReplicaSetName;
596601
serverSettings.SecondaryAcceptableLatency = url.SecondaryAcceptableLatency;
@@ -604,6 +609,7 @@ public static MongoServerSettings FromUrl(MongoUrl url)
604609
#pragma warning disable 618
605610
serverSettings.WriteConcern = url.GetWriteConcern(MongoDefaults.SafeMode.Enabled);
606611
#pragma warning restore
612+
serverSettings.WriteEncoding = null; // WriteEncoding must be provided in code
607613
return serverSettings;
608614
}
609615

@@ -781,7 +787,7 @@ public override string ToString()
781787
parts.Add(string.Format("MinConnectionPoolSize={0}", _minConnectionPoolSize));
782788
if (_readEncoding != null)
783789
{
784-
parts.Add(string.Format("ReadEncoding={0}", _readEncoding));
790+
parts.Add("ReadEncoding=[set]");
785791
}
786792
parts.Add(string.Format("ReadPreference={0}", _readPreference));
787793
parts.Add(string.Format("ReplicaSetName={0}", _replicaSetName));
@@ -799,7 +805,7 @@ public override string ToString()
799805
parts.Add(string.Format("WriteConcern={0}", _writeConcern));
800806
if (_writeEncoding != null)
801807
{
802-
parts.Add(string.Format("WriteEncoding={0}", _writeEncoding));
808+
parts.Add("WriteEncoding=[set]");
803809
}
804810
return string.Join(",", parts.ToArray());
805811
}

0 commit comments

Comments
 (0)