Tuesday, 4 April 2017

Knex JS seed file returns meaningless error about SQL syntax

Im tring to run some knex seeds and I get a meaningless error at least for me: Error: ER_PARSE_ERROR: You have an error in your SQL syntax; check the manual that corresponds to your M ariaDB server version for the right syntax to use near ')' at line 1

I have no idea how to debug my code here is my migration schema:

exports.up = function(knex, Promise) {
  return Promise.all([
      knex.schema.createTable('codes', table => {
          table.increments('id').primary();
          table.string('code').notNullable().unique();
          table.text('description').defaultTo(null);
          table.integer('system_id').unsigned().references('systems.id').defaultTo(null);
          table.integer('unit_id').unsigned().references('units.id').defaultTo(null);
    }),
    knex.schema.createTable('tags', table => {
        table.increments('id').primary();
        table.text('name').defaultTo(null);    
    }),
    knex.schema.createTable('systems', table => {
        table.increments('id').primary();
        table.text('name').defaultTo(null);    
    }),
    knex.schema.createTable('units', table => {
        table.increments('id').primary();
        table.text('name').defaultTo(null);    
    }),
    knex.schema.createTable('codes_tags', table => {
        table.increments('id').primary();
        table.integer('tag_id').unsigned().references('tags.id');
        table.integer('code_id').unsigned().references('codes.id');

    })
  ])
};

exports.down = function(knex, Promise) {
    return Promise.all([
        knex.schema.dropTable('codes_tags'),
        knex.schema.dropTable('codes'),
        knex.schema.dropTable('tags'),
        knex.schema.dropTable('systems'),
        knex.schema.dropTable('units')

    ]);
};

And here is my seed file:

import { CODES } from './data/constants'

exports.seed = async function(knex, Promise) {
  return await populateData(knex, CODES)
};

async function populateData(knex, data){
  for(let code in data){
    let system = await knex('systems').where({name: data[code].system}).select('id')
    if(!system){
      system = await knex('systems').insert({name: data[code].system});
    }
    let tag = await knex('tags').where({name: data[code].type}).select('id');
    if(!tag){
      tag = await knex('tags').insert({name: data[code].type})
    }
    let code = await knex('codes').insert({code: code, system_id: system})
    await knex('codes_tags').insert({code_id: code, system_id: system})
  }
}



via Radostin Slavov

No comments:

Post a Comment