Skip to content

Nested sql tags accross modules #74

@petrzjunior

Description

@petrzjunior

I have a library which constructs SQL filters and I want to consume it in my main project.

Example

In library:

export const filter = sql`WHERE year = 2018`;

In the main project:

const {filter} = require('library');
sql`SELECT * FROM books ${filterThisYear ? filter : undefined}`

Expected behavior

I expect nested sql tags to merge and append the filter.

Actual behavior

Due to the object weirdness in JavaScript, class instances are compared by their prototype chain which depends on the way the class was imported. In this case, instanceof returns false. The SqlContainer class is the same, but imported from a different place. Finally this cause sql not to detect nested tag and treats is as an object parameter instead.

Suggested fix

I created a fork which adds a tag method to allow comparison across modules. This is not the cleanest code ever, but is successfully used in Moment.js for instance.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions