text: 'use strict';
  
  var Raw = require('../../lib/raw');
  var Client = require('../../lib/client');
  var test = require('tape');
  var _ = require('lodash');
  
  var client = new Client({ client: 'mysql' });
  function raw(sql, bindings) {
    return new Raw(client).set(sql, bindings);
  }
  
  test('allows for ?? to interpolate identifiers', function(t) {
    t.plan(1);
    t.equal(
      raw('select * from ?? where id = ? and ?? = ??', [
        'table',
        1,
        'table.first',
        'table.second',
      ]).toString(),
      'select * from "table" where id = 1 and "table"."first" = "table"."second"'
    );
  });
  
  test('allows for object bindings', function(t) {
    t.plan(1);
    t.equal(
      raw('select * from users where user_id = :userId and name = :name', {
        userId: 1,
        name: 'tim',
      }).toString(),
      "select * from users where user_id = 1 and name = 'tim'"
    );
  });
  
  test('allows for :val: for interpolated identifiers', function(t) {
    t.plan(1);
    t.equal(
      raw('select * from :table: where user_id = :userId and name = :name', {
        table: 'users',
        userId: 1,
        name: 'tim',
      }).toString(),
      'select * from "users" where user_id = 1 and name = \'tim\''
    );
  });
  
  test('allows use :val: in start of raw query', function(t) {
    t.plan(1);
    t.equal(
      raw(':userIdCol: = :userId', { userIdCol: 'table', userId: 1 }).toString(),
      '"table" = 1'
    );
  });
  
  test('allows use :val in start of raw query', function(t) {
    t.plan(1);
    t.equal(raw(':userId', { userId: 1 }).toString(), '1');
  });
  
  test('allows for :val: to be interpolated when identifiers with dots', function(t) {
    t.plan(1);
    t.equal(
      raw('select * from "table" join "chair" on :tableCol: = :chairCol:', {
        tableCol: 'table.id',
        chairCol: 'chair.table_id',
      }).toString(),
      'select * from "table" join "chair" on "table"."id" = "chair"."table_id"'
    );
  });
  
  test('allows for options in raw queries, #605', function(t) {
    t.plan(1);
    var x = raw("select 'foo', 'bar';")
      .options({ rowMode: 'array' })
      .toSQL();
  
    t.deepEqual(_.pick(x, ['sql', 'options', 'method', 'bindings']), {
      sql: "select 'foo', 'bar';",
      options: { rowMode: 'array' },
      method: 'raw',
      bindings: [],
    });
  });
  
  test('raw bindings are optional, #853', function(t) {
    t.plan(2);
  
    var sql = raw('select * from ? where id=?', [raw('foo'), 4]).toSQL();
  
    t.equal(sql.sql, 'select * from foo where id=?');
  
    t.deepEqual(sql.bindings, [4]);
  });
  