postgrejs
Version:
Professional PostgreSQL client NodeJS
49 lines (48 loc) • 1.52 kB
JavaScript
import { DataTypeOIDs } from '../constants.js';
const CIRCLE_PATTERN1 = /^< *\( *(-?\d+\.?\d*) *, *(-?\d+\.?\d*) *\) *, *(-?\d+\.?\d*) *>$/;
const CIRCLE_PATTERN2 = /^\( *\( *(-?\d+\.?\d*) *, *(-?\d+\.?\d*) *\) *, *(-?\d+\.?\d*) *\)$/;
const CIRCLE_PATTERN3 = /^\( *(-?\d+\.?\d*) *, *(-?\d+\.?\d*) *\) *, *(-?\d+\.?\d*)$/;
const CIRCLE_PATTERN4 = /^(-?\d+\.?\d*) *, *(-?\d+\.?\d*) *, *(-?\d+\.?\d*)$/;
export const CircleType = {
name: 'circle',
oid: DataTypeOIDs.circle,
jsType: 'object',
parseBinary(v) {
return {
x: v.readDoubleBE(0),
y: v.readDoubleBE(8),
r: v.readDoubleBE(16),
};
},
encodeBinary(buf, v) {
buf.writeDoubleBE(v.x);
buf.writeDoubleBE(v.y);
buf.writeDoubleBE(v.r);
},
parseText(v) {
const m = v.match(CIRCLE_PATTERN1) ||
v.match(CIRCLE_PATTERN2) ||
v.match(CIRCLE_PATTERN3) ||
v.match(CIRCLE_PATTERN4);
if (!m)
return undefined;
return {
x: parseFloat(m[1]),
y: parseFloat(m[2]),
r: parseFloat(m[3]),
};
},
isType(v) {
return (typeof v === 'object' &&
Object.keys(v).length === 3 &&
typeof v.x === 'number' &&
typeof v.y === 'number' &&
typeof v.r === 'number');
},
};
export const ArrayCircleType = {
...CircleType,
name: '_circle',
oid: DataTypeOIDs._circle,
elementsOID: DataTypeOIDs.circle,
};