encode method
Implementation
@override
Uint8List encode() {
final buffer = ByteDataWriter(endian: Endian.little);
// command type
buffer.writeUint8(0x17);
// stmt id
buffer.writeUint32(stmtID, Endian.little);
// flags
buffer.writeUint8(0);
// iteration count (always 1)
buffer.writeUint32(1, Endian.little);
// params
if (params.isNotEmpty) {
// create null-bitmap
final bitmapSize = ((params.length + 7) ~/ 8);
final nullBitmap = Uint8List(bitmapSize);
// write null values into null bitmap
for (int paramIndex = 0; paramIndex < params.length; paramIndex++) {
if (params[paramIndex] == null) {
final paramByteIndex = paramIndex ~/ 8;
final paramBitIndex = paramIndex % 8;
nullBitmap[paramByteIndex] |= (1 << paramBitIndex);
}
}
// write null bitmap
buffer.write(nullBitmap);
// write new-param-bound flag
buffer.writeUint8(1);
// write not null values
// write param types
for (int i = 0; i < params.length; i++) {
final paramType = paramTypes[i];
if (paramType == null) {
// If null, the type is mysqlColumnTypeNull = 0x06
buffer.writeUint8(mysqlColumnTypeNull);
buffer.writeUint8(0); // "unsigned" flag or other, usually 0
} else {
buffer.writeUint8(paramType.intVal);
// For example, to indicate "unsigned", could set something. Here, 0 = no flag.
buffer.writeUint8(0);
}
}
// Write non-null parameter values
for (int i = 0; i < params.length; i++) {
final param = params[i];
final paramType = paramTypes[i];
if (param != null && paramType != null) {
_writeParamValue(buffer, param, paramType);
}
}
}
return buffer.toBytes();
}