Skip to content

Commit de367e1

Browse files
committed
Support for isc_spb_expected_db (DNET-706).
Support for isc_spb_utf8_filename (DNET-772). Heavy refactoring.
1 parent 61efdaf commit de367e1

16 files changed

+268
-290
lines changed

Provider/src/FirebirdSql.Data.FirebirdClient/Common/ServiceParameterBuffer.cs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
//$Authors = Carlos Guzman Alvarez, Jiri Cincura ([email protected])
1717

1818
using System;
19-
using System.IO;
2019
using System.Text;
2120

2221
namespace FirebirdSql.Data.Common
@@ -39,14 +38,16 @@ public void Append(int type, int value)
3938
Write(value);
4039
}
4140

42-
public void Append(int type, string value)
41+
public void Append(int type, string value) => Append(type, value, Encoding.Default);
42+
public void Append(int type, string value, Encoding encoding)
4343
{
44-
Append(type, Encoding.Default.GetBytes(value));
44+
Append(type, encoding.GetBytes(value));
4545
}
4646

47-
public void Append(byte type, string value)
47+
public void Append(byte type, string value) => Append(type, value, Encoding.Default);
48+
public void Append(byte type, string value, Encoding encoding)
4849
{
49-
Append(type, Encoding.Default.GetBytes(value));
50+
Append(type, encoding.GetBytes(value));
5051
}
5152

5253
public void Append(int type, byte[] value)

Provider/src/FirebirdSql.Data.FirebirdClient/Services/FbBackup.cs

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -42,29 +42,28 @@ public void Execute()
4242

4343
try
4444
{
45-
StartSpb = new ServiceParameterBuffer();
46-
StartSpb.Append(IscCodes.isc_action_svc_backup);
47-
StartSpb.Append(IscCodes.isc_spb_dbname, Database);
45+
Open();
46+
var startSpb = new ServiceParameterBuffer();
47+
startSpb.Append(IscCodes.isc_action_svc_backup);
48+
startSpb.Append(IscCodes.isc_spb_dbname, Database, SpbFilenameEncoding);
4849
foreach (var file in BackupFiles)
4950
{
50-
StartSpb.Append(IscCodes.isc_spb_bkp_file, file.BackupFile);
51+
startSpb.Append(IscCodes.isc_spb_bkp_file, file.BackupFile, SpbFilenameEncoding);
5152
if (file.BackupLength.HasValue)
52-
StartSpb.Append(IscCodes.isc_spb_bkp_length, (int)file.BackupLength);
53+
startSpb.Append(IscCodes.isc_spb_bkp_length, (int)file.BackupLength);
5354
}
5455
if (Verbose)
55-
StartSpb.Append(IscCodes.isc_spb_verbose);
56+
startSpb.Append(IscCodes.isc_spb_verbose);
5657
if (Factor > 0)
57-
StartSpb.Append(IscCodes.isc_spb_bkp_factor, Factor);
58+
startSpb.Append(IscCodes.isc_spb_bkp_factor, Factor);
5859
if (!string.IsNullOrEmpty(SkipData))
59-
StartSpb.Append(IscCodes.isc_spb_bkp_skip_data, SkipData);
60-
StartSpb.Append(IscCodes.isc_spb_options, (int)Options);
61-
StartSpb.Append(IscCodes.isc_spb_bkp_stat, Statistics.BuildConfiguration());
62-
63-
Open();
64-
StartTask();
60+
startSpb.Append(IscCodes.isc_spb_bkp_skip_data, SkipData);
61+
startSpb.Append(IscCodes.isc_spb_options, (int)Options);
62+
startSpb.Append(IscCodes.isc_spb_bkp_stat, Statistics.BuildConfiguration());
63+
StartTask(startSpb);
6564
if (Verbose)
6665
{
67-
ProcessServiceOutput();
66+
ProcessServiceOutput(EmptySpb);
6867
}
6968
}
7069
catch (Exception ex)

Provider/src/FirebirdSql.Data.FirebirdClient/Services/FbConfiguration.cs

Lines changed: 71 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -31,204 +31,192 @@ public void SetSqlDialect(int sqlDialect)
3131
{
3232
EnsureDatabase();
3333

34-
StartSpb = new ServiceParameterBuffer();
35-
StartSpb.Append(IscCodes.isc_action_svc_properties);
36-
StartSpb.Append(IscCodes.isc_spb_dbname, Database);
37-
StartSpb.Append(IscCodes.isc_spb_prp_set_sql_dialect, sqlDialect);
38-
3934
Open();
40-
StartTask();
35+
var startSpb = new ServiceParameterBuffer();
36+
startSpb.Append(IscCodes.isc_action_svc_properties);
37+
startSpb.Append(IscCodes.isc_spb_dbname, Database, SpbFilenameEncoding);
38+
startSpb.Append(IscCodes.isc_spb_prp_set_sql_dialect, sqlDialect);
39+
StartTask(startSpb);
4140
Close();
4241
}
4342

4443
public void SetSweepInterval(int sweepInterval)
4544
{
4645
EnsureDatabase();
4746

48-
StartSpb = new ServiceParameterBuffer();
49-
StartSpb.Append(IscCodes.isc_action_svc_properties);
50-
StartSpb.Append(IscCodes.isc_spb_dbname, Database);
51-
StartSpb.Append(IscCodes.isc_spb_prp_sweep_interval, sweepInterval);
52-
5347
Open();
54-
StartTask();
48+
var startSpb = new ServiceParameterBuffer();
49+
startSpb.Append(IscCodes.isc_action_svc_properties);
50+
startSpb.Append(IscCodes.isc_spb_dbname, Database, SpbFilenameEncoding);
51+
startSpb.Append(IscCodes.isc_spb_prp_sweep_interval, sweepInterval);
52+
StartTask(startSpb);
5553
Close();
5654
}
5755

5856
public void SetPageBuffers(int pageBuffers)
5957
{
6058
EnsureDatabase();
6159

62-
StartSpb = new ServiceParameterBuffer();
63-
StartSpb.Append(IscCodes.isc_action_svc_properties);
64-
StartSpb.Append(IscCodes.isc_spb_dbname, Database);
65-
StartSpb.Append(IscCodes.isc_spb_prp_page_buffers, pageBuffers);
66-
6760
Open();
68-
StartTask();
61+
var startSpb = new ServiceParameterBuffer();
62+
startSpb.Append(IscCodes.isc_action_svc_properties);
63+
startSpb.Append(IscCodes.isc_spb_dbname, Database, SpbFilenameEncoding);
64+
startSpb.Append(IscCodes.isc_spb_prp_page_buffers, pageBuffers);
65+
StartTask(startSpb);
6966
Close();
7067
}
7168

7269
public void DatabaseShutdown(FbShutdownMode mode, int seconds)
7370
{
7471
EnsureDatabase();
7572

76-
StartSpb = new ServiceParameterBuffer();
77-
StartSpb.Append(IscCodes.isc_action_svc_properties);
78-
StartSpb.Append(IscCodes.isc_spb_dbname, Database);
73+
Open();
74+
var startSpb = new ServiceParameterBuffer();
75+
startSpb.Append(IscCodes.isc_action_svc_properties);
76+
startSpb.Append(IscCodes.isc_spb_dbname, Database, SpbFilenameEncoding);
7977
switch (mode)
8078
{
8179
case FbShutdownMode.Forced:
82-
StartSpb.Append(IscCodes.isc_spb_prp_shutdown_db, seconds);
80+
startSpb.Append(IscCodes.isc_spb_prp_shutdown_db, seconds);
8381
break;
8482
case FbShutdownMode.DenyTransaction:
85-
StartSpb.Append(IscCodes.isc_spb_prp_deny_new_transactions, seconds);
83+
startSpb.Append(IscCodes.isc_spb_prp_deny_new_transactions, seconds);
8684
break;
8785
case FbShutdownMode.DenyConnection:
88-
StartSpb.Append(IscCodes.isc_spb_prp_deny_new_attachments, seconds);
86+
startSpb.Append(IscCodes.isc_spb_prp_deny_new_attachments, seconds);
8987
break;
9088
}
91-
92-
Open();
93-
StartTask();
89+
StartTask(startSpb);
9490
Close();
9591
}
9692

9793
public void DatabaseShutdown2(FbShutdownOnlineMode mode, FbShutdownType type, int seconds)
9894
{
9995
EnsureDatabase();
10096

101-
StartSpb = new ServiceParameterBuffer();
102-
StartSpb.Append(IscCodes.isc_action_svc_properties);
103-
StartSpb.Append(IscCodes.isc_spb_dbname, Database);
104-
StartSpb.Append(IscCodes.isc_spb_prp_shutdown_mode, FbShutdownOnlineModeToIscCode(mode));
97+
Open();
98+
var startSpb = new ServiceParameterBuffer();
99+
startSpb.Append(IscCodes.isc_action_svc_properties);
100+
startSpb.Append(IscCodes.isc_spb_dbname, Database, SpbFilenameEncoding);
101+
startSpb.Append(IscCodes.isc_spb_prp_shutdown_mode, FbShutdownOnlineModeToIscCode(mode));
105102
switch (type)
106103
{
107104
case FbShutdownType.ForceShutdown:
108-
StartSpb.Append(IscCodes.isc_spb_prp_force_shutdown, seconds);
105+
startSpb.Append(IscCodes.isc_spb_prp_force_shutdown, seconds);
109106
break;
110107
case FbShutdownType.AttachmentsShutdown:
111-
StartSpb.Append(IscCodes.isc_spb_prp_attachments_shutdown, seconds);
108+
startSpb.Append(IscCodes.isc_spb_prp_attachments_shutdown, seconds);
112109
break;
113110
case FbShutdownType.TransactionsShutdown:
114-
StartSpb.Append(IscCodes.isc_spb_prp_transactions_shutdown, seconds);
111+
startSpb.Append(IscCodes.isc_spb_prp_transactions_shutdown, seconds);
115112
break;
116113
}
117-
118-
Open();
119-
StartTask();
114+
StartTask(startSpb);
120115
Close();
121116
}
122117

123118
public void DatabaseOnline()
124119
{
125120
EnsureDatabase();
126121

127-
StartSpb = new ServiceParameterBuffer();
128-
StartSpb.Append(IscCodes.isc_action_svc_properties);
129-
StartSpb.Append(IscCodes.isc_spb_dbname, Database);
130-
StartSpb.Append(IscCodes.isc_spb_options, IscCodes.isc_spb_prp_db_online);
131-
132122
Open();
133-
StartTask();
123+
var startSpb = new ServiceParameterBuffer();
124+
startSpb.Append(IscCodes.isc_action_svc_properties);
125+
startSpb.Append(IscCodes.isc_spb_dbname, Database, SpbFilenameEncoding);
126+
startSpb.Append(IscCodes.isc_spb_options, IscCodes.isc_spb_prp_db_online);
127+
StartTask(startSpb);
134128
Close();
135129
}
136130

137131
public void DatabaseOnline2(FbShutdownOnlineMode mode)
138132
{
139133
EnsureDatabase();
140134

141-
StartSpb = new ServiceParameterBuffer();
142-
StartSpb.Append(IscCodes.isc_action_svc_properties);
143-
StartSpb.Append(IscCodes.isc_spb_dbname, Database);
144-
StartSpb.Append(IscCodes.isc_spb_prp_online_mode, FbShutdownOnlineModeToIscCode(mode));
145-
146135
Open();
147-
StartTask();
136+
var startSpb = new ServiceParameterBuffer();
137+
startSpb.Append(IscCodes.isc_action_svc_properties);
138+
startSpb.Append(IscCodes.isc_spb_dbname, Database, SpbFilenameEncoding);
139+
startSpb.Append(IscCodes.isc_spb_prp_online_mode, FbShutdownOnlineModeToIscCode(mode));
140+
StartTask(startSpb);
148141
Close();
149142
}
150143

151144
public void ActivateShadows()
152145
{
153146
EnsureDatabase();
154147

155-
StartSpb = new ServiceParameterBuffer();
156-
StartSpb.Append(IscCodes.isc_action_svc_properties);
157-
StartSpb.Append(IscCodes.isc_spb_dbname, Database);
158-
StartSpb.Append(IscCodes.isc_spb_options, IscCodes.isc_spb_prp_activate);
159-
160148
Open();
161-
StartTask();
149+
var startSpb = new ServiceParameterBuffer();
150+
startSpb.Append(IscCodes.isc_action_svc_properties);
151+
startSpb.Append(IscCodes.isc_spb_dbname, Database, SpbFilenameEncoding);
152+
startSpb.Append(IscCodes.isc_spb_options, IscCodes.isc_spb_prp_activate);
153+
StartTask(startSpb);
162154
Close();
163155
}
164156

165157
public void SetForcedWrites(bool forcedWrites)
166158
{
167159
EnsureDatabase();
168160

169-
StartSpb = new ServiceParameterBuffer();
170-
StartSpb.Append(IscCodes.isc_action_svc_properties);
171-
StartSpb.Append(IscCodes.isc_spb_dbname, Database);
161+
Open();
162+
var startSpb = new ServiceParameterBuffer();
163+
startSpb.Append(IscCodes.isc_action_svc_properties);
164+
startSpb.Append(IscCodes.isc_spb_dbname, Database, SpbFilenameEncoding);
172165
if (forcedWrites)
173166
{
174-
StartSpb.Append(IscCodes.isc_spb_prp_write_mode, (byte)IscCodes.isc_spb_prp_wm_sync);
167+
startSpb.Append(IscCodes.isc_spb_prp_write_mode, (byte)IscCodes.isc_spb_prp_wm_sync);
175168
}
176169
else
177170
{
178-
StartSpb.Append(IscCodes.isc_spb_prp_write_mode, (byte)IscCodes.isc_spb_prp_wm_async);
171+
startSpb.Append(IscCodes.isc_spb_prp_write_mode, (byte)IscCodes.isc_spb_prp_wm_async);
179172
}
180-
181-
Open();
182-
StartTask();
173+
StartTask(startSpb);
183174
Close();
184175
}
185176

186177
public void SetReserveSpace(bool reserveSpace)
187178
{
188179
EnsureDatabase();
189180

190-
StartSpb = new ServiceParameterBuffer();
191-
StartSpb.Append(IscCodes.isc_action_svc_properties);
192-
StartSpb.Append(IscCodes.isc_spb_dbname, Database);
181+
Open();
182+
var startSpb = new ServiceParameterBuffer();
183+
startSpb.Append(IscCodes.isc_action_svc_properties);
184+
startSpb.Append(IscCodes.isc_spb_dbname, Database, SpbFilenameEncoding);
193185
if (reserveSpace)
194186
{
195-
StartSpb.Append(IscCodes.isc_spb_prp_reserve_space, (byte)IscCodes.isc_spb_prp_res);
187+
startSpb.Append(IscCodes.isc_spb_prp_reserve_space, (byte)IscCodes.isc_spb_prp_res);
196188
}
197189
else
198190
{
199-
StartSpb.Append(IscCodes.isc_spb_prp_reserve_space, (byte)IscCodes.isc_spb_prp_res_use_full);
191+
startSpb.Append(IscCodes.isc_spb_prp_reserve_space, (byte)IscCodes.isc_spb_prp_res_use_full);
200192
}
201-
202-
Open();
203-
StartTask();
193+
StartTask(startSpb);
204194
Close();
205195
}
206196

207197
public void SetAccessMode(bool readOnly)
208198
{
209199
EnsureDatabase();
210200

211-
StartSpb = new ServiceParameterBuffer();
212-
StartSpb.Append(IscCodes.isc_action_svc_properties);
213-
StartSpb.Append(IscCodes.isc_spb_dbname, Database);
214-
StartSpb.Append(IscCodes.isc_spb_prp_access_mode, (byte)(readOnly ? IscCodes.isc_spb_prp_am_readonly : IscCodes.isc_spb_prp_am_readwrite));
215-
216201
Open();
217-
StartTask();
202+
var startSpb = new ServiceParameterBuffer();
203+
startSpb.Append(IscCodes.isc_action_svc_properties);
204+
startSpb.Append(IscCodes.isc_spb_dbname, Database, SpbFilenameEncoding);
205+
startSpb.Append(IscCodes.isc_spb_prp_access_mode, (byte)(readOnly ? IscCodes.isc_spb_prp_am_readonly : IscCodes.isc_spb_prp_am_readwrite));
206+
StartTask(startSpb);
218207
Close();
219208
}
220209

221210
public void NoLinger()
222211
{
223212
EnsureDatabase();
224213

225-
StartSpb = new ServiceParameterBuffer();
226-
StartSpb.Append(IscCodes.isc_action_svc_properties);
227-
StartSpb.Append(IscCodes.isc_spb_dbname, Database);
228-
StartSpb.Append(IscCodes.isc_spb_options, IscCodes.isc_spb_prp_nolinger);
229-
230214
Open();
231-
StartTask();
215+
var startSpb = new ServiceParameterBuffer();
216+
startSpb.Append(IscCodes.isc_action_svc_properties);
217+
startSpb.Append(IscCodes.isc_spb_dbname, Database, SpbFilenameEncoding);
218+
startSpb.Append(IscCodes.isc_spb_options, IscCodes.isc_spb_prp_nolinger);
219+
StartTask(startSpb);
232220
Close();
233221
}
234222

Provider/src/FirebirdSql.Data.FirebirdClient/Services/FbLog.cs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,11 @@ public void Execute()
3232
{
3333
try
3434
{
35-
StartSpb = new ServiceParameterBuffer();
36-
StartSpb.Append(IscCodes.isc_action_svc_get_ib_log);
37-
3835
Open();
39-
StartTask();
40-
ProcessServiceOutput();
36+
var startSpb = new ServiceParameterBuffer();
37+
startSpb.Append(IscCodes.isc_action_svc_get_ib_log);
38+
StartTask(startSpb);
39+
ProcessServiceOutput(EmptySpb);
4140
}
4241
catch (Exception ex)
4342
{

Provider/src/FirebirdSql.Data.FirebirdClient/Services/FbNBackup.cs

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -49,17 +49,16 @@ public void Execute()
4949

5050
try
5151
{
52-
StartSpb = new ServiceParameterBuffer();
53-
StartSpb.Append(IscCodes.isc_action_svc_nbak);
54-
StartSpb.Append(IscCodes.isc_spb_dbname, Database);
55-
StartSpb.Append(IscCodes.isc_spb_nbk_level, _level);
56-
StartSpb.Append(IscCodes.isc_spb_nbk_file, BackupFile);
57-
StartSpb.Append(IscCodes.isc_spb_nbk_direct, DirectIO ? "ON" : "OFF");
58-
StartSpb.Append(IscCodes.isc_spb_options, (int)Options);
59-
6052
Open();
61-
StartTask();
62-
ProcessServiceOutput();
53+
var startSpb = new ServiceParameterBuffer();
54+
startSpb.Append(IscCodes.isc_action_svc_nbak);
55+
startSpb.Append(IscCodes.isc_spb_dbname, Database, SpbFilenameEncoding);
56+
startSpb.Append(IscCodes.isc_spb_nbk_level, _level);
57+
startSpb.Append(IscCodes.isc_spb_nbk_file, BackupFile, SpbFilenameEncoding);
58+
startSpb.Append(IscCodes.isc_spb_nbk_direct, DirectIO ? "ON" : "OFF");
59+
startSpb.Append(IscCodes.isc_spb_options, (int)Options);
60+
StartTask(startSpb);
61+
ProcessServiceOutput(EmptySpb);
6362
}
6463
catch (Exception ex)
6564
{

0 commit comments

Comments
 (0)