15 lines
500 B
TypeScript
15 lines
500 B
TypeScript
function fnv1a(value: string, seed: number): number {
|
|
let hash = seed >>> 0;
|
|
for (let index = 0; index < value.length; index += 1) {
|
|
hash ^= value.charCodeAt(index);
|
|
hash = Math.imul(hash, 0x01000193);
|
|
}
|
|
return hash >>> 0;
|
|
}
|
|
|
|
export function sqlTextFingerprint(sql: string): string {
|
|
const first = fnv1a(sql, 0x811c9dc5).toString(16).padStart(8, "0");
|
|
const second = fnv1a(sql, 0x9e3779b9).toString(16).padStart(8, "0");
|
|
return `${sql.length.toString(16)}:${first}${second}`;
|
|
}
|