Socket
Book a DemoInstallSign in
Socket

nodenamo-query-parser

Package Overview
Dependencies
Maintainers
0
Versions
7
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

nodenamo-query-parser

A query parser for nodenamo

latest
Source
npmnpm
Version
1.3.0
Version published
Maintainers
0
Created
Source

nodenamo-query-parser

Nodenamo Query Language Parser

Usage

Example

import {parse} from 'nodenamo-query-parser'

let statement = parse('FIND * FROM users WHERE department = "IT" FILTER enabled = true ORDER ASC LIMIT 10')

console.log(statement) 

Output

{
  type: 'find',
  projections: undefined,
  from: 'users',
  using: undefined,
  where: {
    expressionAttributeNames: { '#department': 'department' },
    expressionAttributeValues: { ':department': 'IT' },
    keyConditions: '#department = :department'
  },
  filter: {
    expressionAttributeNames: { '#enabled': 'enabled' },
    expressionAttributeValues: { ':enabled': true },
    filterExpression: '#enabled = :enabled'
  },
  resume: undefined,
  order: true,
  limit: 10,
  stronglyConsistent: undefined
}

Nodenamo Query Language

Table of Content

IMPORT statement

Syntax

IMPORT class FROM "path" IMPORT class AS alias FROM "path" IMPORT {class} FROM "path" IMPORT {class as alias} FROM "path"

where:

Example

IMPORT usersTable as users FROM "./usersTable.ts"

Output

{
  type: 'import',
  entity: [ { name: 'usersTable', as: 'users', default: true } ],
  from: './usersTable.ts'
}

INSERT Statement

Syntax

INSERT jsonObject INTO table WHERE expression

Example

INSERT {id:2,title:"some thing",price:21,status:true} INTO books WHERE attribute_not_exists(id)

Output

{
  type: 'insert',
  object: { id: 2, title: 'some thing', price: 21, status: true },
  into: 'books',
  where: {
    expressionAttributeNames: { '#id': 'id' },
    expressionAttributeValues: {},
    conditionExpression: 'attribute_not_exists(#id)'
  }
}

GET Statement

Syntax

GET id FROM table STRONGLY CONSISTENT

Example

GET 42 FROM users STRONGLY CONSISTENT

Output

{
  type: 'get', 
  id: 42, 
  from: 'users', 
  stronglyConsistent: true
}

LIST Statement

Syntax

LIST projections FROM table USING indexName BY hashRange FILTER filterExpressions RESUME "lastEvaluatedKey" ORDER order LIMIT number STRONGLY CONSISTENT

where:

  • projections is a list of properties to return. Use * to return all properties.
  • indexName is the name of a GSI.
  • hashRange is a value to search against a hash property. It can be optionally followed by a comma and a value to search against a range property.
  • order is ASC or DESC
  • strongly consistent can be used to request a consistent read.

Example

LIST * FROM users BY "name" , "timestamp" FILTER email = "someone@example.com" ORDER asc LIMIT 10 STRONGLY CONSISTENT

Output

{
  type: 'list',
  projections: undefined,
  from: 'users',
  using: undefined,
  by: { hash: 'name', range: 'timestamp' },
  filter: {
    expressionAttributeNames: { '#email': 'email' },
    expressionAttributeValues: { ':email': 'someone@example.com' },
    filterExpression: '#email = :email'
  },
  resume: undefined,
  order: true,
  limit: 10,
  stronglyConsistent: true
}

FIND Statement

Syntax

FIND projections FROM table USING indexName WHERE keyConditions FILTER filterExpressions RESUME "lastEvaluatedKey" ORDER order LIMIT number STRONGLY CONSISTENT

where:

  • projections is a list of properties to return. Use * to return all properties.
  • indexName is the name of a GSI.
  • order is ASC or DESC
  • strongly consistent can be used to request a consistent read.

Example

FIND id, name, email FROM users USING users-gsi WHERE name = "some one" FILTER email = "someone@example.com" resume "token" ORDER desc LIMIT 2 STRONGLY CONSISTENT

Output

{
  type: 'find',
  projections: [ 'id', 'name', 'email' ],
  from: 'users',
  using: 'users-gsi',
  where: {
    expressionAttributeNames: { '#name': 'name' },
    expressionAttributeValues: { ':name': 'some one' },
    keyConditions: '#name = :name'
  },
  filter: {
    expressionAttributeNames: { '#email': 'email' },
    expressionAttributeValues: { ':email': 'someone@example.com' },
    filterExpression: '#email = :email'
  },
  resume: 'token',
  order: false,
  limit: 2,
  stronglyConsistent: true
}

UPDATE Statement

Syntax

UPDATE jsonObject FROM table WHERE conditionExpression RETURNING returnValue WITH VERSION CHECK

where:

  • WITH VERSION CHECK can be used to request a version check.
  • returnValue is NONE, ALLNEW, or ALLOLD

Example

UPDATE {id:1,name:"new name"} FROM users WHERE attribute_not_exists(id) RETURNING ALLOLD WITH VERSION CHECK

Output

{
  type: 'update',
  object: { id: 1, name: 'new name' },
  from: 'users',
  where: {
    expressionAttributeNames: { '#id': 'id' },
    expressionAttributeValues: {},
    conditionExpression: 'attribute_not_exists(#id)'
  },
  versionCheck: true,
  returning: AllNew
}

ON Statement

Syntax

ON id FROM table SETsetExpression ADD addExpression DELETE deleteExpression REMOVE removeExpression conditionExpression RETURNING returnValue WITH VERSION CHECK

where:

  • WITH VERSION CHECK can be used to request a version check.
  • returnValue is NONE, ALLNEW, or ALLOLD

Example

ON 42 FROM users SET lastViewed = "today" ADD count 1 WHERE published = true WITH VERSION CHECK

Output

{
  type: 'on',
  id: 42,
  from: 'users',
  set: {
    setExpressions: [ '#lastViewed___1 = :lastViewed___1' ],
    expressionAttributeNames: { '#lastViewed___1': 'lastViewed' },
    expressionAttributeValues: { ':lastViewed___1': 'today' }
  },
  add: {
    addExpressions: [ '#count___2 :count___2' ],
    expressionAttributeNames: { '#count___2': 'count' },
    expressionAttributeValues: { ':count___2': 1 }
  },
  remove: undefined,
  delete: undefined,
  where: {
    expressionAttributeNames: { '#published': 'published' },
    expressionAttributeValues: { ':published': true },
    conditionExpression: '#published = :published'
  },
  versionCheck: true
}

DELETE Statement

Syntax

DELETE id FROM table WHERE conditionExpression

Example

DELETE 42 FROM books WHERE deleted <> true

Output

{
  type: 'delete',
  id: 42,
  from: 'books',
  where: {
    expression: '#deleted <> :deleted',
    expressionAttributeNames: { '#deleted': 'deleted' },
    expressionAttributeValues: { ':deleted': true }
  }
}

UNLOAD TABLE Statement

Syntax

UNLOAD TABLE name

where:

  • name is the imported class name or its alias.

Example

UNLOAD TABLE users

Output

{ 
  type: 'unload_table', 
  name: 'users' 
}

CREATE TABLE Statement

Syntax

CREATE TABLE FOR name WITH CAPACITY OF readCapacityNumber, writeCapacityNumber

where:

  • name is the imported class name or its alias.
  • readCapacityNumber is the desired read capacity for the table.
  • writeCapacityNumber is the desired write capacity for the table.

Example

CREATE TABLE FOR users WITH CAPACITY OF 123, 456

Output

{
  type: 'create_table',
  for: 'users',
  withCapacityOf: { readCapacity: 123, writeCapacity: 456 }
}

DELETE TABLE Statement

Syntax

DELETE TABLE FOR name

where:

  • name is the imported class name or its alias.

Example

DELETE TABLE FOR users

Output

{
  type: 'delete_table',
  for: 'users'
}

SHOW TABLES Statement

Syntax

SHOW TABLES

Example

SHOW TABLES

Output

{
  type: 'show_tables',
}

EXPLAIN Statement

Syntax

Explain statement

where:

  • statement is one of nodenamo query language stattements.

Example

EXPLAIN INSERT {id:1,name:"some one"} INTO users

Output

{
  type: 'explain',
  statement: {
    type: 'insert',
    object: { id: 1, name: 'some one' },
    into: 'users',
    where: undefined
  }
}

DESCRIBE Statement

Syntax

Describe name

where:

  • name is the imported class name or its alias.

Example

DESCRIBE users

Output

{
  type: 'describe',
  name: 'users'
}

Keywords

nodenamo

FAQs

Package last updated on 12 Jul 2024

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts