Skip to content

Commit

Permalink
WIP.
Browse files Browse the repository at this point in the history
  • Loading branch information
arthurschreiber committed Oct 1, 2023
1 parent b78d2dd commit 550e984
Show file tree
Hide file tree
Showing 6 changed files with 389 additions and 200 deletions.
19 changes: 4 additions & 15 deletions src/token/env-change-token-parser.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import Parser, { type ParserOptions } from './stream-parser';
import { type ParserOptions } from './stream-parser';
import { Collation } from '../collation';

import {
Expand All @@ -12,24 +12,13 @@ import {
DatabaseMirroringPartnerEnvChangeToken,
ResetConnectionEnvChangeToken,
RoutingEnvChangeToken,
CollationChangeToken
CollationChangeToken,
type EnvChangeToken
} from './token';

import { NotEnoughDataError, readBVarByte, readBVarChar, readUInt16LE, readUInt8, readUsVarByte, type Result } from './helpers';
import type { BufferList } from 'bl/BufferList';

type EnvChangeToken =
DatabaseEnvChangeToken |
LanguageEnvChangeToken |
CharsetEnvChangeToken |
PacketSizeEnvChangeToken |
BeginTransactionEnvChangeToken |
CommitTransactionEnvChangeToken |
RollbackTransactionEnvChangeToken |
DatabaseMirroringPartnerEnvChangeToken |
ResetConnectionEnvChangeToken |
RoutingEnvChangeToken |
CollationChangeToken;

const types: { [key: number]: { name: string, event?: string }} = {
1: {
name: 'DATABASE',
Expand Down
54 changes: 30 additions & 24 deletions src/token/feature-ext-ack-parser.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
import Parser, { type ParserOptions } from './stream-parser';
import type { BufferList } from 'bl/BufferList';
import { NotEnoughDataError, readUInt32LE, readUInt8, type Result } from './helpers';
import { type ParserOptions } from './stream-parser';

import { FeatureExtAckToken } from './token';

Expand All @@ -12,33 +14,37 @@ const FEATURE_ID = {
TERMINATOR: 0xFF
};

function featureExtAckParser(parser: Parser, _options: ParserOptions, callback: (token: FeatureExtAckToken) => void) {
function featureExtAckParser(buf: Buffer | BufferList, offset: number, _options: ParserOptions): Result<FeatureExtAckToken> {
let fedAuth: Buffer | undefined;
let utf8Support: boolean | undefined;

function next() {
parser.readUInt8((featureId) => {
if (featureId === FEATURE_ID.TERMINATOR) {
return callback(new FeatureExtAckToken(fedAuth, utf8Support));
}

parser.readUInt32LE((featureAckDataLen) => {
parser.readBuffer(featureAckDataLen, (featureData) => {
switch (featureId) {
case FEATURE_ID.FEDAUTH:
fedAuth = featureData;
break;
case FEATURE_ID.UTF8_SUPPORT:
utf8Support = !!featureData[0];
break;
}
next();
});
});
});
}
while (true) {
let featureId;
({ value: featureId, offset } = readUInt8(buf, offset));

if (featureId === FEATURE_ID.TERMINATOR) {
return { value: new FeatureExtAckToken(fedAuth, utf8Support), offset };
}

let featureAckDataLen;
({ value: featureAckDataLen, offset } = readUInt32LE(buf, offset));

next();
if (buf.length < offset + featureAckDataLen) {
throw new NotEnoughDataError(offset + featureAckDataLen);
}

const featureData = buf.slice(offset, offset + featureAckDataLen);
offset += featureAckDataLen;

switch (featureId) {
case FEATURE_ID.FEDAUTH:
fedAuth = featureData;
break;
case FEATURE_ID.UTF8_SUPPORT:
utf8Support = !!featureData[0];
break;
}
}
}

export default featureExtAckParser;
Expand Down
2 changes: 1 addition & 1 deletion src/token/row-token-parser.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ async function rowParser(parser: Parser): Promise<RowToken> {
result = readValue(parser.buffer, parser.position, metadata, parser.options);
} catch (err) {
if (err instanceof NotEnoughDataError) {
await parser.streamBuffer.waitForChunk();
await parser.waitForChunk();
continue;
}

Expand Down

0 comments on commit 550e984

Please sign in to comment.