66//-----------------------------------------------------------------------
77
88using Akka . Persistence . Sql . Common . Snapshot ;
9+ using Akka . Serialization ;
10+ using Akka . Util ;
911using Newtonsoft . Json ;
1012using Npgsql ;
1113using NpgsqlTypes ;
@@ -99,7 +101,7 @@ WITH upsert AS (
99101
100102 protected override DbCommand CreateCommand ( DbConnection connection )
101103 {
102- return ( ( NpgsqlConnection ) connection ) . CreateCommand ( ) ;
104+ return ( ( NpgsqlConnection ) connection ) . CreateCommand ( ) ;
103105 }
104106
105107 protected override void SetTimestampParameter ( DateTime timestamp , DbCommand command ) => AddParameter ( command , "@Timestamp" , DbType . Int64 , timestamp . Ticks ) ;
@@ -109,6 +111,25 @@ protected override void SetPayloadParameter(object snapshot, DbCommand command)
109111 command . Parameters . Add ( new NpgsqlParameter ( "@Payload" , serializationResult . DbType ) { Value = serializationResult . Payload } ) ;
110112 }
111113
114+ protected override void SetManifestParameters ( object snapshot , DbCommand command )
115+ {
116+ var snapshotType = snapshot . GetType ( ) ;
117+ var serializer = Serialization . FindSerializerForType ( snapshotType , Configuration . DefaultSerializer ) ;
118+
119+ string manifest = "" ;
120+ if ( serializer is SerializerWithStringManifest )
121+ {
122+ manifest = ( ( SerializerWithStringManifest ) serializer ) . Manifest ( snapshot ) ;
123+ }
124+ else if ( ! serializer . IncludeManifest )
125+ {
126+ manifest = snapshotType . TypeQualifiedName ( ) ;
127+ }
128+
129+ AddParameter ( command , "@Manifest" , DbType . String , manifest ) ;
130+ AddParameter ( command , "@SerializerId" , DbType . Int32 , serializer . Identifier ) ;
131+ }
132+
112133 protected override SelectedSnapshot ReadSnapshot ( DbDataReader reader )
113134 {
114135 var persistenceId = reader . GetString ( 0 ) ;
@@ -118,14 +139,12 @@ protected override SelectedSnapshot ReadSnapshot(DbDataReader reader)
118139
119140 int ? serializerId = null ;
120141 Type type = null ;
121- if ( reader . IsDBNull ( 5 ) )
122- {
123- type = Type . GetType ( manifest , true ) ;
124- }
125- else
126- {
142+
143+ if ( ! string . IsNullOrEmpty ( manifest ) )
144+ type = Type . GetType ( manifest , throwOnError : true ) ;
145+
146+ if ( ! reader . IsDBNull ( 5 ) )
127147 serializerId = reader . GetInt32 ( 5 ) ;
128- }
129148
130149 var snapshot = _deserialize ( type , reader [ 4 ] , manifest , serializerId ) ;
131150
@@ -143,18 +162,18 @@ public class PostgreSqlQueryConfiguration : QueryConfiguration
143162 public readonly JsonSerializerSettings JsonSerializerSettings ;
144163
145164 public PostgreSqlQueryConfiguration (
146- string schemaName ,
147- string snapshotTableName ,
148- string persistenceIdColumnName ,
149- string sequenceNrColumnName ,
150- string payloadColumnName ,
151- string manifestColumnName ,
152- string timestampColumnName ,
165+ string schemaName ,
166+ string snapshotTableName ,
167+ string persistenceIdColumnName ,
168+ string sequenceNrColumnName ,
169+ string payloadColumnName ,
170+ string manifestColumnName ,
171+ string timestampColumnName ,
153172 string serializerIdColumnName ,
154- TimeSpan timeout ,
173+ TimeSpan timeout ,
155174 StoredAsType storedAs ,
156175 string defaultSerializer ,
157- JsonSerializerSettings jsonSerializerSettings = null )
176+ JsonSerializerSettings jsonSerializerSettings = null )
158177 : base ( schemaName , snapshotTableName , persistenceIdColumnName , sequenceNrColumnName , payloadColumnName , manifestColumnName , timestampColumnName , serializerIdColumnName , timeout , defaultSerializer )
159178 {
160179 StoredAs = storedAs ;
0 commit comments