vwf .

Database Layer

Type-safe OracleObjectModel query builder with native spatial support

Query Builder

Query Type

Table

Available columns:

user_idemailphonecreated_at

Generated Query Code

// Select a query type to generate code

Database Features

Not an ORM

Direct SQL control with query builder pattern

No magic, full control

Oracle Spatial

Native SDO_GEOMETRY support for geo queries

Location intelligence

Bind Parameters

Automatic SQL injection protection

Secure by default

Connection Pooling

Automatic connection management

High performance

Auto-scaling

Oracle Autonomous scales automatically

No DBA needed

Type Safety

Column aliasing and type hints

Predictable results

Database Schema

users

Core authentication data

user_idNUMBERPK
emailVARCHAR2(255)UNIQUE
phoneVARCHAR2(20)
password_hashVARCHAR2(255)
created_atTIMESTAMP

user_profiles

Extended user information

user_idNUMBERFK
nameVARCHAR2(100)
bioCLOB
profile_imageVARCHAR2(500)
locationSDO_GEOMETRYSPATIAL

services

Service offerings with spatial data

service_idNUMBERPK
user_idNUMBERFK
titleVARCHAR2(200)
categoryVARCHAR2(50)INDEX
locationSDO_GEOMETRYSPATIAL
priceNUMBER(10,2)

Real-World Example

// Find nearby services with provider details using query()
async function findNearbyServices(userLocation, radiusKm = 5) {
  // First, get services within radius using spatial query
  const nearbyServices = await OracleObjectModel.spatialProximity({
    queryEntity: {
      'service_id': 'id',
      'title': null,
      'category': null,
      'price': null,
      'user_id': 'providerId',
      'distance_km': 'distance'
    },
    queryTable: 'services',
    location: userLocation,
    radiusKm: radiusKm
  });

  // Then get provider details using query() - much cleaner!
  const providerIds = nearbyServices.map(s => s.providerId);
  const providers = await OracleObjectModel.query(
    ['user_id:id', 'first_name', 'last_name', 'profile_image:avatar'],
    'users',
    { user_id: { $in: providerIds } }
  );
  // Returns: [{ id, firstName, lastName, avatar }]

  // Combine results
  return nearbyServices.map(service => ({
    ...service,
    provider: providers.find(p => p.id === service.providerId)
  }));
}

Continue Learning

Explore more framework features