Skip to main content
Let’s create a simple TypeORM application that queries the Regatta database. Start by importing the relevant classes from the typeorm-regatta package:
import { Column, DataSource, Entity, PrimaryColumn } from "typeorm-regatta"
Note that you should import all relevant classes based on the functionality of your application and its requirements.

Connection Details

Connection parameters will be defined as follows:
const DB_HOST = "aaa.bbb.ccc.ddd:pppp";
const DB_USER = "MyUserName";
const DB_PASSWORD = "SomeSophisticatedPassword";

Example Appliaction

To help you get acquainted with TypeORM on Regatta, we’ve provided a simple code example below.
This application demonstrates common tasks such as defining entities, initializing a DataSource, inserting data, querying, updating, deleting, and cleaning up schema.

Project Structure

Create the following folder structure:
typeorm-example/
├── package.json
├── tsconfig.json
└── src/
    └── typeorm_example.ts

Example Code

Create the main program and save it as: src/typeorm_example.ts
import { Column, DataSource, Entity, PrimaryColumn } from "typeorm-regatta"
import { v4 as uuidv4 } from "uuid" // Use uuid to generate unique ids
import type { QueryRunner } from "typeorm-regatta"

/**
 * Entity definition.
 * TypeORM will map this class to a "users" table.
 */
@Entity({ name: "users" })
class User {
    @PrimaryColumn()
    id!: string

    @Column()
    firstName!: string

    @Column()
    lastName!: string

    @Column()
    age!: number
}

/**
 * Connection details (replace with your own).
 * Note: In TypeORM-Regatta, host includes "<ip>:<port>".
 */
const DB_HOST = "aaa.bbb.ccc.ddd:pppp"
const DB_USER = "MyUserName"
const DB_PASSWORD = "SomeSophisticatedPassword"

/**
 * Create a new DataSource instance.
 * - `type: "regatta"` is provided by the typeorm-regatta package.
 * - `synchronize: true` tells TypeORM to create the schema automatically.
 * - `extra.deviceNames` is a Regatta-specific device mapping definition.
 */
const dataSource = new DataSource({
    type: "regatta",
    host: DB_HOST,
    username: DB_USER,
    password: DB_PASSWORD,
    entities: [User],
    synchronize: true,
    logging: true,
    extra: {
        deviceNames: ["m10d1"],
    },
})

async function run() {
    try {
        // Initialize the DataSource
        await dataSource.initialize()
        console.log("Data Source has been initialized!")

        const userRepository = dataSource.getRepository(User)

        // Create a new User
        const user = new User()
        user.id = uuidv4()
        user.firstName = "John"
        user.lastName = "Doe"
        user.age = 25

        // Insert
        await userRepository.save(user)
        console.log("User has been saved!")

        // Query
        const users = await userRepository.find()
        console.log("Users:", users)

        // Update
        user.age = 26
        await userRepository.save(user)
        console.log("User has been updated:", user)

        // Delete
        await userRepository.remove(user)
        console.log("User has been removed:", user)
    } catch (error) {
        console.error("Error:", error)
    } finally {
        // Drop the User table
        await dropUserTable()

        // Close the connection
        await dataSource.destroy()
    }
}

async function dropUserTable() {
    let queryRunner: QueryRunner | null = null

    try {
        queryRunner = dataSource.createQueryRunner()
        await queryRunner.connect()
        await queryRunner.startTransaction()

        // Drop the table created by @Entity() -> default table name is "user"
        await queryRunner.query('DROP TABLE "users"')
        console.log("User table has been dropped!")

        await queryRunner.commitTransaction()
    } catch (error) {
        console.error("Error dropping table:", error)
        if (queryRunner) {
            await queryRunner.rollbackTransaction()
        }
    } finally {
        if (queryRunner) {
            await queryRunner.release()
        }
    }
}

// Run the example app
run()

TypeScript Configuration

Create tsconfig.json in the project root:
{
  "compilerOptions": {
    "target": "ES2020",
    "module": "commonjs",
    "strict": true,
    "esModuleInterop": true,
    "experimentalDecorators": true,
    "strictPropertyInitialization": false,
    "emitDecoratorMetadata": true,
    "outDir": "./dist",
    "lib": ["ES2020", "DOM"],
    "typeRoots": ["./node_modules/@types"]
  },
  "include": ["src/typeorm_example.ts"]
}

Package Setup

Create a package.json in the project root:
{
  "name": "typeorm-regatta-example",
  "version": "1.0.0",
  "private": true,
  "type": "commonjs",
  "scripts": {
    "build": "tsc",
    "start": "node dist/typeorm_example.js"
  },
  "dependencies": {
    "typeorm-regatta": "file:path/to/typeorm-regatta-<version>.tgz",
    "node-regatta": "file:path/to/node-regatta-<version>_<type>.tgz",
    "uuid": "^9.0.0",
    "reflect-metadata": "^0.2.0"
  },
  "devDependencies": {
    "typescript": "^5.3.3",
    "@types/node": "^18.13.0",
    "@types/uuid": "^9.0.0"
  }
}
This package.json assumes you already downloaded the Regatta TypeORM package and the Node.js driver, and have them available on your local environment.Please ensure that you update the package.json file with the correct paths to the downloaded .tgz files before proceeding.

Running the Application

From the project root run:
npm install
npm run build
npm start
Expected output:
query: SHOW TABLES LIKE 'users'
query: CREATE TABLE SET NOT READY "users" ("id" varchar PRIMARY KEY INDEX WITH (devices = (m10d1)), "firstName" varchar NOT NULL, "lastName" varchar NOT NULL, "age" int8 NOT NULL) WITH (devices = (m10d1))
query: ALTER TABLE "users" SET READY
Data Source has been initialized!
query: SELECT "User"."id" AS "User_id", "User"."firstName" AS "User_firstName", "User"."lastName" AS "User_lastName", "User"."age" AS "User_age" FROM "users" "User" WHERE "User"."id" IN ($1) -- PARAMETERS: ["acaf5ed5-223d-40ae-8080-9196717cd54f"]
query: START TRANSACTION
query: INSERT INTO "users"("id", "firstName", "lastName", "age") VALUES ($1, $2, $3, $4) -- PARAMETERS: ["acaf5ed5-223d-40ae-8080-9196717cd54f","John","Doe",25]
query: COMMIT
User has been saved!
query: SELECT "User"."id" AS "User_id", "User"."firstName" AS "User_firstName", "User"."lastName" AS "User_lastName", "User"."age" AS "User_age" FROM "users" "User"
Users: [
  User {
    id: 'acaf5ed5-223d-40ae-8080-9196717cd54f',
    firstName: 'John',
    lastName: 'Doe',
    age: 25
  }
]
query: SELECT "User"."id" AS "User_id", "User"."firstName" AS "User_firstName", "User"."lastName" AS "User_lastName", "User"."age" AS "User_age" FROM "users" "User" WHERE "User"."id" IN ($1) -- PARAMETERS: ["acaf5ed5-223d-40ae-8080-9196717cd54f"]
query: START TRANSACTION
query: UPDATE "users" SET "age" = $1 WHERE "id" IN ($2) -- PARAMETERS: [26,"acaf5ed5-223d-40ae-8080-9196717cd54f"]
query: COMMIT
User has been updated: User {
  id: 'acaf5ed5-223d-40ae-8080-9196717cd54f',
  firstName: 'John',
  lastName: 'Doe',
  age: 26
}
query: SELECT "User"."id" AS "User_id", "User"."firstName" AS "User_firstName", "User"."lastName" AS "User_lastName", "User"."age" AS "User_age" FROM "users" "User" WHERE "User"."id" IN ($1) -- PARAMETERS: ["acaf5ed5-223d-40ae-8080-9196717cd54f"]
query: START TRANSACTION
query: DELETE FROM "users" WHERE "id" = $1 -- PARAMETERS: ["acaf5ed5-223d-40ae-8080-9196717cd54f"]
query: COMMIT
User has been removed: User { id: undefined, firstName: 'John', lastName: 'Doe', age: 26 }
query: START TRANSACTION
query: DROP TABLE "users"
User table has been dropped!
query: COMMIT