Tutorial: 002 - Select - Select all from a Single Table

002 - Select - Select all from a Single Table

The simplest query one can perform is selecting all data from a single table.

'use strict';

const MySQLDriver = require('node-data-mapper-mysql').MySQLDriver;
const driver      = new MySQLDriver(require('../bikeShopConOpts.json'));

// 1) Initialize node-data-mapper.
// 2) Retrieve all the records from the bike_shops table.
// 3) Print the results on the console.
// 4) Close the DB connection.
driver
  .initialize()
  .then(runQuery)
  .then(printResult)
  .catch(console.error)
  .finally(() => driver.end());

function runQuery(dataContext) {
  // Select all columns from the bike_shops table.
  const query = dataContext
    .from('bike_shops')
    .select();

  // This is the query that will be executed.
  console.log('Query:');
  console.log(query.toString(), '\n');

  // Executing a query returns a promise.
  return query
    .execute();
}

function printResult(result) {
  console.log('Result:');
  console.log(result);
}
  

Running this code ($ node example/retrieve/allFromSingleTable.js) yields the following output.

Query:
SELECT  `bike_shops`.`address` AS `bike_shops.address`,
        `bike_shops`.`bikeShopID` AS `bike_shops.bikeShopID`,
        `bike_shops`.`name` AS `bike_shops.name`
FROM    `bike_shops` AS `bike_shops` 

Result:
{ bike_shops: 
   [ { bikeShopID: 1,
       address: '9107 Sunrise Blvd',
       name: 'Bob\'s Bikes' },
     { bikeShopID: 2,
       address: '18271 Highway 50',
       name: 'Zephyr Cove Cruisers' },
     { bikeShopID: 3,
       address: '3100 La Riviera Wy',
       name: 'Cycle Works' } ] }

  

In the above example, DataContext#from is called, which returns a FromAdapter instance. The notion of a From is central to node-data-mapper, and a FromAdapter instance can be used for selecting, updating, and deleting. This should be fairly intuitive: When using raw SQL a user can SELECT...FROM, UPDATE...FROM, and DELETE...FROM. One of the goals of node-data-mapper is to provide an interface that closely resembles SQL, and since FROM so often occurs in queries, DataContext#from is often the starting point when querying with node-data-mapper.