Skip to content

Commit f65c1b0

Browse files
committed
Convert record implementations to anonymous classes
1 parent c189977 commit f65c1b0

File tree

3 files changed

+132
-129
lines changed

3 files changed

+132
-129
lines changed

src/main/php/rdbms/tds/TdsProtocol.class.php

Lines changed: 63 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -101,34 +101,34 @@ abstract class TdsProtocol {
101101
];
102102

103103
static function __static() {
104-
self::$recordsFor[0][self::T_VARCHAR]= newinstance('rdbms.tds.TdsRecord', [], '{
104+
self::$recordsFor[0][self::T_VARCHAR]= new class() extends TdsRecord {
105105
public function unmarshal($stream, $field, $records) {
106106
$len= $stream->getByte();
107107
if (0 === $len) {
108108
return null;
109-
} else if (\xp::ENCODING === $field["conv"]) {
109+
} else if (\xp::ENCODING === $field['conv']) {
110110
return $stream->read($len);
111111
} else {
112-
return iconv($field["conv"], \xp::ENCODING, $stream->read($len));
112+
return iconv($field['conv'], \xp::ENCODING, $stream->read($len));
113113
}
114114
}
115-
}');
116-
self::$recordsFor[0][self::XT_VARCHAR]= newinstance('rdbms.tds.TdsRecord', [], '{
115+
};
116+
self::$recordsFor[0][self::XT_VARCHAR]= new class() extends TdsRecord {
117117
public function unmarshal($stream, $field, $records) {
118118
$len= $stream->getShort();
119119
if (0xFFFF === $len) {
120120
return null;
121-
} else if (\xp::ENCODING === $field["conv"]) {
121+
} else if (\xp::ENCODING === $field['conv']) {
122122
return $stream->read($len);
123123
} else {
124-
return iconv($field["conv"], \xp::ENCODING, $stream->read($len));
124+
return iconv($field['conv'], \xp::ENCODING, $stream->read($len));
125125
}
126126
}
127-
}');
127+
};
128128
self::$recordsFor[0][self::XT_NVARCHAR]= self::$recordsFor[0][self::XT_VARCHAR];
129-
self::$recordsFor[0][self::T_INTN]= newinstance('rdbms.tds.TdsRecord', [], '{
129+
self::$recordsFor[0][self::T_INTN]= new class() extends TdsRecord {
130130
public function unmarshal($stream, $field, $records) {
131-
$len= $field["len"] ?? $stream->getByte();
131+
$len= $field['len'] ?? $stream->getByte();
132132
switch ($len) {
133133
case 1: return $stream->getByte();
134134
case 2: return $stream->getShort();
@@ -137,116 +137,116 @@ public function unmarshal($stream, $field, $records) {
137137
default: return null;
138138
}
139139
}
140-
}');
141-
self::$recordsFor[0][self::T_INT1]= newinstance('rdbms.tds.TdsRecord', [], '{
140+
};
141+
self::$recordsFor[0][self::T_INT1]= new class() extends TdsRecord {
142142
public function unmarshal($stream, $field, $records) {
143143
return $stream->getByte();
144144
}
145-
}');
146-
self::$recordsFor[0][self::T_INT2]= newinstance('rdbms.tds.TdsRecord', [], '{
145+
};
146+
self::$recordsFor[0][self::T_INT2]= new class() extends TdsRecord {
147147
public function unmarshal($stream, $field, $records) {
148148
return $stream->getShort();
149149
}
150-
}');
151-
self::$recordsFor[0][self::T_INT4]= newinstance('rdbms.tds.TdsRecord', [], '{
150+
};
151+
self::$recordsFor[0][self::T_INT4]= new class() extends TdsRecord {
152152
public function unmarshal($stream, $field, $records) {
153153
return $stream->getInt32();
154154
}
155-
}');
156-
self::$recordsFor[0][self::T_INT8]= newinstance('rdbms.tds.TdsRecord', [], '{
155+
};
156+
self::$recordsFor[0][self::T_INT8]= new class() extends TdsRecord {
157157
public function unmarshal($stream, $field, $records) {
158158
return $this->toNumber($stream->getInt64(), 0, 0);
159159
}
160-
}');
161-
self::$recordsFor[0][self::T_SINT1]= newinstance('rdbms.tds.TdsRecord', [], '{
160+
};
161+
self::$recordsFor[0][self::T_SINT1]= new class() extends TdsRecord {
162162
public function unmarshal($stream, $field, $records) {
163163
return $stream->getByte();
164164
}
165-
}');
166-
self::$recordsFor[0][self::T_UINT2]= newinstance('rdbms.tds.TdsRecord', [], '{
165+
};
166+
self::$recordsFor[0][self::T_UINT2]= new class() extends TdsRecord {
167167
public function unmarshal($stream, $field, $records) {
168168
return $stream->getShort();
169169
}
170-
}');
171-
self::$recordsFor[0][self::T_UINT4]= newinstance('rdbms.tds.TdsRecord', [], '{
170+
};
171+
self::$recordsFor[0][self::T_UINT4]= new class() extends TdsRecord {
172172
public function unmarshal($stream, $field, $records) {
173173
return $stream->getLong();
174174
}
175-
}');
176-
self::$recordsFor[0][self::T_UINT8]= newinstance('rdbms.tds.TdsRecord', [], '{
175+
};
176+
self::$recordsFor[0][self::T_UINT8]= new class() extends TdsRecord {
177177
public function unmarshal($stream, $field, $records) {
178178
return $this->toNumber($stream->getUInt64(), 0, 0);
179179
}
180-
}');
181-
self::$recordsFor[0][self::T_UINTN]= newinstance('rdbms.tds.TdsRecord', [], '{
180+
};
181+
self::$recordsFor[0][self::T_UINTN]= new class() extends TdsRecord {
182182
public function unmarshal($stream, $field, $records) {
183-
$len= $field["len"] ?? $stream->getByte();
183+
$len= $field['len'] ?? $stream->getByte();
184184
switch ($len) {
185185
case 2: return $stream->getShort();
186186
case 4: return $stream->getLong();
187187
case 8: $this->toNumber($stream->getUInt64(), 0, 0);
188188
default: return null;
189189
}
190190
}
191-
}');
192-
self::$recordsFor[0][self::T_FLTN]= newinstance('rdbms.tds.TdsRecord', [], '{
191+
};
192+
self::$recordsFor[0][self::T_FLTN]= new class() extends TdsRecord {
193193
public function unmarshal($stream, $field, $records) {
194-
$len= $field["len"] ?? $stream->getByte();
194+
$len= $field['len'] ?? $stream->getByte();
195195
switch ($len) {
196196
case 4: return $this->toFloat($stream->read(4)); break;
197197
case 8: return $this->toDouble($stream->read(8)); break;
198198
default: return null;
199199
}
200200
}
201-
}');
202-
self::$recordsFor[0][self::T_FLT8]= newinstance('rdbms.tds.TdsRecord', [], '{
201+
};
202+
self::$recordsFor[0][self::T_FLT8]= new class() extends TdsRecord {
203203
public function unmarshal($stream, $field, $records) {
204204
return $this->toDouble($stream->read(8));
205205
}
206-
}');
207-
self::$recordsFor[0][self::T_REAL]= newinstance('rdbms.tds.TdsRecord', [], '{
206+
};
207+
self::$recordsFor[0][self::T_REAL]= new class() extends TdsRecord {
208208
public function unmarshal($stream, $field, $records) {
209209
return $this->toFloat($stream->read(4));
210210
}
211-
}');
212-
self::$recordsFor[0][self::T_DATE]= newinstance('rdbms.tds.TdsRecord', [], '{
211+
};
212+
self::$recordsFor[0][self::T_DATE]= new class() extends TdsRecord {
213213
public function unmarshal($stream, $field, $records) {
214214
return $this->toDate($stream->getLong(), 0);
215215
}
216-
}');
217-
self::$recordsFor[0][self::T_DATETIME4]= newinstance('rdbms.tds.TdsRecord', [], '{
216+
};
217+
self::$recordsFor[0][self::T_DATETIME4]= new class() extends TdsRecord {
218218
public function unmarshal($stream, $field, $records) {
219219
return $this->toDate($stream->getShort(), $stream->getShort() * 60);
220220
}
221-
}');
222-
self::$recordsFor[0][self::T_DATETIME]= newinstance('rdbms.tds.TdsRecord', [], '{
221+
};
222+
self::$recordsFor[0][self::T_DATETIME]= new class() extends TdsRecord {
223223
public function unmarshal($stream, $field, $records) {
224224
return $this->toDate($stream->getLong(), $stream->getLong() / 300);
225225
}
226-
}');
227-
self::$recordsFor[0][self::T_MONEYN]= newinstance('rdbms.tds.TdsRecord', [], '{
226+
};
227+
self::$recordsFor[0][self::T_MONEYN]= new class() extends TdsRecord {
228228
public function unmarshal($stream, $field, $records) {
229-
$len= $field["len"] ?? $stream->getByte();
229+
$len= $field['len'] ?? $stream->getByte();
230230
switch ($len) {
231231
case 4: return $this->toMoney($stream->getInt32()); break;
232232
case 8: return $this->toMoney($stream->getInt32(), $stream->getInt32()); break;
233233
default: return null;
234234
}
235235
}
236-
}');
237-
self::$recordsFor[0][self::T_MONEY4]= newinstance('rdbms.tds.TdsRecord', [], '{
236+
};
237+
self::$recordsFor[0][self::T_MONEY4]= new class() extends TdsRecord {
238238
public function unmarshal($stream, $field, $records) {
239239
return $this->toMoney($stream->getInt32());
240240
}
241-
}');
242-
self::$recordsFor[0][self::T_MONEY]= newinstance('rdbms.tds.TdsRecord', [], '{
241+
};
242+
self::$recordsFor[0][self::T_MONEY]= new class() extends TdsRecord {
243243
public function unmarshal($stream, $field, $records) {
244244
return $this->toMoney($stream->getInt32(), $stream->getInt32());
245245
}
246-
}');
246+
};
247247
self::$recordsFor[0][self::T_CHAR]= self::$recordsFor[0][self::T_VARCHAR];
248248
self::$recordsFor[0][self::XT_CHAR]= self::$recordsFor[0][self::XT_VARCHAR];
249-
self::$recordsFor[0][self::T_TEXT]= newinstance('rdbms.tds.TdsRecord', [], '{
249+
self::$recordsFor[0][self::T_TEXT]= new class() extends TdsRecord {
250250
public function unmarshal($stream, $field, $records) {
251251
$has= $stream->getByte();
252252
if ($has !== 16) return null;
@@ -255,39 +255,39 @@ public function unmarshal($stream, $field, $records) {
255255

256256
$len= $stream->getLong();
257257
if ($len === 0) {
258-
return $field["status"] & 0x20 ? null : "";
259-
} else if (\xp::ENCODING === $field["conv"]) {
258+
return $field['status'] & 0x20 ? null : '';
259+
} else if (\xp::ENCODING === $field['conv']) {
260260
return $stream->read($len);
261261
} else {
262-
return iconv($field["conv"], \xp::ENCODING, $stream->read($len));
262+
return iconv($field['conv'], \xp::ENCODING, $stream->read($len));
263263
}
264264
}
265-
}');
265+
};
266266
self::$recordsFor[0][self::T_NTEXT]= self::$recordsFor[0][self::T_TEXT];
267-
self::$recordsFor[0][self::T_BITN]= newinstance('rdbms.tds.TdsRecord', [], '{
267+
self::$recordsFor[0][self::T_BITN]= new class() extends TdsRecord {
268268
public function unmarshal($stream, $field, $records) {
269269
return $stream->getByte() ? $stream->getByte() : null;
270270
}
271-
}');
272-
self::$recordsFor[0][self::T_BIT]= newinstance('rdbms.tds.TdsRecord', [], '{
271+
};
272+
self::$recordsFor[0][self::T_BIT]= new class() extends TdsRecord {
273273
public function unmarshal($stream, $field, $records) {
274274
return $stream->getByte();
275275
}
276-
}');
277-
self::$recordsFor[0][self::T_UNITEXT]= newinstance('rdbms.tds.TdsRecord', [], '{
276+
};
277+
self::$recordsFor[0][self::T_UNITEXT]= new class() extends TdsRecord {
278278
public function unmarshal($stream, $field, $records) {
279279
$ptr= $stream->getByte();
280280
$stream->read($ptr + 8); // Skip TEXTPTR + 8 Bytes TIMESTAMP
281281

282282
$len= $stream->getLong();
283283
if ($len === 0) {
284-
return $field["status"] & 0x20 ? null : "";
284+
return $field['status'] & 0x20 ? null : '';
285285
} else {
286286
$chunk= $stream->read($len);
287-
return iconv("utf-16le", \xp::ENCODING, $chunk);
287+
return iconv('utf-16le', \xp::ENCODING, $chunk);
288288
}
289289
}
290-
}');
290+
};
291291
}
292292

293293
/**

src/main/php/rdbms/tds/TdsV5Protocol.class.php

Lines changed: 29 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
<?php namespace rdbms\tds;
22

3+
use lang\IllegalArgumentException;
4+
35
/**
46
* TDS V5 protocol implementation
57
*
@@ -20,7 +22,7 @@ static function __static() { }
2022
* @return [:rdbms.tds.TdsRecord] handlers
2123
*/
2224
protected function setupRecords() {
23-
$records[self::T_NUMERIC]= newinstance('rdbms.tds.TdsRecord', [], '{
25+
$records[self::T_NUMERIC]= new class() extends TdsRecord {
2426
public function unmarshal($stream, $field, $records) {
2527
if (-1 === ($len= $stream->getByte()- 1)) return null;
2628
$pos= $stream->getByte();
@@ -29,78 +31,79 @@ public function unmarshal($stream, $field, $records) {
2931
$bytes= str_repeat("\0", 4 - $i).$bytes;
3032
$len+= 4 - $i;
3133
}
32-
for ($n= 0, $m= $pos ? -1 : 1, $i= $len- 4; $i >= 0; $i-= 4, $m= bcmul($m, "4294967296", 0)) {
33-
$n= bcadd($n, bcmul(sprintf("%u", current(unpack("N", substr($bytes, $i, 4)))), $m, 0), 0);
34+
for ($n= 0, $m= $pos ? -1 : 1, $i= $len- 4; $i >= 0; $i-= 4, $m= bcmul($m, '4294967296', 0)) {
35+
$n= bcadd($n, bcmul(sprintf('%u', current(unpack('N', substr($bytes, $i, 4)))), $m, 0), 0);
3436
}
35-
return $this->toNumber($n, $field["scale"], $field["prec"]);
37+
return $this->toNumber($n, $field['scale'], $field['prec']);
3638
}
37-
}');
39+
};
3840
$records[self::T_DECIMAL]= $records[self::T_NUMERIC];
39-
$records[self::T_BINARY]= newinstance('rdbms.tds.TdsRecord', [], '{
41+
$records[self::T_BINARY]= new class() extends TdsRecord {
4042
public function unmarshal($stream, $field, $records) {
4143
if (0 === ($len= $stream->getByte())) return null;
4244
$string= $stream->read($len);
43-
return iconv($field["conv"], \xp::ENCODING, substr($string, 0, strcspn($string, "\0")));
45+
return iconv($field['conv'], \xp::ENCODING, substr($string, 0, strcspn($string, "\0")));
4446
}
45-
}');
46-
$records[self::T_IMAGE]= newinstance('rdbms.tds.TdsRecord', [], '{
47+
};
48+
$records[self::T_IMAGE]= new class() extends TdsRecord {
4749
public function unmarshal($stream, $field, $records) {
4850
$has= $stream->getByte();
4951
if ($has !== 16) return null; // Seems to always be 16 - obsolete?
5052
5153
$stream->read(24); // Skip 16 Byte TEXTPTR, 8 Byte TIMESTAMP
5254
$len= $stream->getLong();
53-
if (0 === $len) return null;
55+
if (0 === $len) re;
56+
turn null;
5457

5558
$r= $stream->read($len);
5659

5760
// HACK - cannot figure out why UNITEXT is not being returned as such
5861
// but as IMAGE type with different inside layout!
5962
return iconv(
60-
strlen($r) > 1 && "\0" === $r{1} ? "ucs-2le" : $field["conv"],
63+
strlen($r) > 1 && "\0" === $r[1] ? 'ucs-2le' : $field['conv'],
6164
\xp::ENCODING,
6265
$r
6366
);
6467
}
65-
}');
66-
$records[self::T_VARBINARY]= newinstance('rdbms.tds.TdsRecord', [], '{
68+
};
69+
$records[self::T_VARBINARY]= new class() extends TdsRecord {
6770
public function unmarshal($stream, $field, $records) {
6871
if (0 === ($len= $stream->getByte())) return null;
6972

70-
return iconv($field["conv"], \xp::ENCODING, $stream->read($len));
73+
return iconv($field['conv'], \xp::ENCODING, $stream->read($len));
7174
}
72-
}');
73-
$records[self::T_LONGBINARY]= newinstance('rdbms.tds.TdsRecord', [], '{
75+
};
76+
$records[self::T_LONGBINARY]= new class() extends TdsRecord {
7477
public function unmarshal($stream, $field, $records) {
7578
$len= $stream->getLong();
7679
return $stream->getString($len / 2);
7780
}
78-
}');
79-
$records[self::T_LONGCHAR]= newinstance('rdbms.tds.TdsRecord', [], '{
81+
};
82+
$records[self::T_LONGCHAR]= new class() extends TdsRecord {
8083
public function unmarshal($stream, $field, $records) {
8184
$len= $stream->getLong();
8285
if ($len === 0) {
8386
return null;
8487
} else {
85-
if (\xp::ENCODING === $field["conv"]) {
88+
if (\xp::ENCODING === $field['conv']) {
8689
$chars= $stream->read($len);
8790
} else {
88-
$chars= iconv($field["conv"], \xp::ENCODING, $stream->read($len));
91+
$chars= iconv($field['conv'], \xp::ENCODING, $stream->read($len));
8992
}
90-
return $chars === " " ? "" : $chars;
93+
return $chars === ' ' ? '' : $chars;
9194
}
9295
}
93-
}');
94-
self::$recordsFor[0][self::T_DATETIMN]= newinstance('rdbms.tds.TdsRecord', [], '{
96+
};
97+
self::$recordsFor[0][self::T_DATETIMN]= new class() extends TdsRecord {
9598
public function unmarshal($stream, $field, $records) {
96-
$len= $field["len"] ?? $stream->getByte();
99+
$len= $field['len'] ?? $stream->getByte();
97100
switch ($len) {
98101
case 4: return $this->toDate($stream->getShort(), $stream->getShort() * 60); break;
99102
case 8: return $this->toDate($stream->getLong(), $stream->getLong()); break;
100103
default: return null;
101104
}
102105
}
103-
}');
106+
};
104107
return $records;
105108
}
106109

@@ -121,7 +124,7 @@ protected function defaultPacketSize() { return 512; }
121124
*/
122125
protected function login($user, $password, $charset= null) {
123126
if (strlen($password) > 253) {
124-
throw new \lang\IllegalArgumentException('Password length must not exceed 253 bytes.');
127+
throw new IllegalArgumentException('Password length must not exceed 253 bytes.');
125128
}
126129

127130
$charset= $charset ?: 'utf8';

0 commit comments

Comments
 (0)