From 9e5ae26de0ac6ad68b6c9ba7aa7420b20b5349d1 Mon Sep 17 00:00:00 2001 From: Vijay Soni Date: Fri, 11 Oct 2024 22:39:32 +0530 Subject: [PATCH] Add PGlite version to VFS file Related to #369 --- packages/pglite/src/pglite.ts | 13 +++++++++++++ packages/pglite/src/postgresMod.ts | 17 +++++++++++++++- packages/pglite/tests/version.test.ts | 28 +++++++++++++++++++++++++++ 3 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 packages/pglite/tests/version.test.ts diff --git a/packages/pglite/src/pglite.ts b/packages/pglite/src/pglite.ts index ea76d725..3760e7e4 100644 --- a/packages/pglite/src/pglite.ts +++ b/packages/pglite/src/pglite.ts @@ -424,6 +424,9 @@ export class PGlite for (const initFn of extensionInitFns) { await initFn() } + + // Write the PGlite version to a file + await this.writePGliteVersionFile() } /** @@ -763,4 +766,14 @@ export class PGlite _runExclusiveTransaction(fn: () => Promise): Promise { return this.#transactionMutex.runExclusive(fn) } + + /** + * Write the PGlite version to a file + */ + async writePGliteVersionFile() { + const version = await this.query<{ version: string }>('SELECT version()') + const versionString = `Created by: ${version.rows[0].version}` + const filePath = `${PGDATA}/PGLITE_VERSION` + this.mod!.FS.writeFile(filePath, versionString) + } } diff --git a/packages/pglite/src/postgresMod.ts b/packages/pglite/src/postgresMod.ts index 5eb7a1ea..f62f8ef2 100644 --- a/packages/pglite/src/postgresMod.ts +++ b/packages/pglite/src/postgresMod.ts @@ -34,4 +34,19 @@ type PostgresFactory = ( moduleOverrides?: Partial, ) => Promise -export default PostgresModFactory as PostgresFactory +const PGLITE_VERSION = 'v0.2.11' + +const PostgresModFactoryWithVersion: PostgresFactory = async ( + moduleOverrides = {}, +) => { + const mod = await PostgresModFactory(moduleOverrides) + mod.preRun.push((mod) => { + mod.FS.writeFile( + '/confdefs.h', + `#define PG_VERSION_STR "PostgreSQL $PG_VERSION (PGlite ${PGLITE_VERSION}) on $host, compiled by $cc_string, \`expr $ac_cv_sizeof_void_p * 8\`-bit"` + ) + }) + return mod +} + +export default PostgresModFactoryWithVersion diff --git a/packages/pglite/tests/version.test.ts b/packages/pglite/tests/version.test.ts new file mode 100644 index 00000000..0febe468 --- /dev/null +++ b/packages/pglite/tests/version.test.ts @@ -0,0 +1,28 @@ +import { PGlite } from '../src/pglite'; +import { describe, it, expect } from 'vitest'; +import { promises as fs } from 'fs'; + +describe('PGlite version reporting', () => { + let pg: PGlite; + + beforeAll(async () => { + pg = await PGlite.create({ dataDir: 'memory://test' }); + }); + + afterAll(async () => { + await pg.close(); + }); + + it('should create PGLITE_VERSION file with correct content', async () => { + const versionFilePath = '/tmp/pglite/base/PGLITE_VERSION'; + const versionFileContent = await fs.readFile(versionFilePath, 'utf8'); + const version = await pg.query<{ version: string }>('SELECT version()'); + const expectedContent = `Created by: ${version.rows[0].version}`; + expect(versionFileContent).toBe(expectedContent); + }); + + it('should report correct version with SELECT VERSION()', async () => { + const result = await pg.query<{ version: string }>('SELECT version()'); + expect(result.rows[0].version).toContain('PGlite'); + }); +});