Git Product home page Git Product logo

Comments (5)

nene avatar nene commented on September 7, 2024 1

The problem is that you're trying to match the string between double quotes:

" . date('y-m-d') . "

with a regular expression

['"]\s?\..*\.\s?['"]

This would work, but the problem is that this string is also inside singe quotes:

'" . date('y-m-d') . "'

That regex would only match from the second character of this string, so it won't succeed. Next sql-formatter will try to match a single-quoted string token, which will succeed, matching the part within single quotes:

'" . date('

It will then continue detecting the following tokens: y, -, m, -, d, ') . "'.

I guess you'll need to cover this case with another more specialized regex. Though fundamentally you can't parse PHP with a regular expression. Hopefully you know the limitations of this approach.

from sql-formatter.

nene avatar nene commented on September 7, 2024 1

Well it's your call if you want to shoot yourself in the foot, but already in this example SQL, this regex will match the following:

'" . date('Y-m-d') . "', 'YYYY-MM-DD'

That is, it will greedily match everything between first and last quote. It will also happily match from " to ' if it sees the opportunity.

from sql-formatter.

stuzer05 avatar stuzer05 commented on September 7, 2024

The problem is that you're trying to match the string between double quotes:

" . date('y-m-d') . "

with a regular expression

['"]\s?\..*\.\s?['"]

This would work, but the problem is that this string is also inside singe quotes:

'" . date('y-m-d') . "'

That regex would only match from the second character of this string, so it won't succeed. Next sql-formatter will try to match a single-quoted string token, which will succeed, matching the part within single quotes:

'" . date('

It will then continue detecting the following tokens: y, -, m, -, d, ') . "'.

I guess you'll need to cover this case with another more specialized regex. Though fundamentally you can't parse PHP with a regular expression. Hopefully you know the limitations of this approach.

Thank you! You are absolutely right. I change my config to

{
  language: 'postgresql',
  tabWidth: 4,
  keywordCase: 'upper',
  functionCase: 'upper',
  identifierCase: 'lower',
  linesBetweenQueries: 1,
  paramTypes: {
    custom: [
      { regex: String.raw`\{\$?[\w\d\->\[\]]+\}` },
      { regex: String.raw`\$[\w\d\->\[\]]+` },
      { regex: String.raw`['"].*['"]` },
    ],
    positional: true,
    named: [':', '@'],
  },
}

and everything works

from sql-formatter.

nene avatar nene commented on September 7, 2024

This ['"].*['"] regex is likely not what you want. It will override the builtin double- and single-quoted strings/identifiers matching in SQL Formatter with a broken implementation. You really should use something more specific than that.

from sql-formatter.

stuzer05 avatar stuzer05 commented on September 7, 2024

This ['"].*['"] regex is likely not what you want. It will override the builtin double- and single-quoted strings/identifiers matching in SQL Formatter with a broken implementation. You really should use something more specific than that.

I've tested some queries, everything seems to be fine

from sql-formatter.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.