{"id":43582,"library":"pg-slang","title":"pg-slang","description":"Converts informal SQL SELECT statements (e.g., \"SELECT 'food name', 'calcium' FROM 'apples'\") into formal SQL (e.g., \"SELECT 'name', 'ca', 'ca_e' FROM 'compositions' WHERE ...\") via a user-supplied mapping function. Version 0.2.6, low release cadence. Key differentiator: decouples user-facing informal queries from actual schema by delegating mapping to an external callback, enabling dynamic column/table resolution against a database or dictionary.","status":"active","version":"0.2.6","language":"javascript","source_language":"en","source_url":"https://github.com/nodef/pg-slang","tags":["javascript","pg","slang","sql","select","informal","formal","table","column"],"install":[{"cmd":"npm install pg-slang","lang":"bash","label":"npm"},{"cmd":"yarn add pg-slang","lang":"bash","label":"yarn"},{"cmd":"pnpm add pg-slang","lang":"bash","label":"pnpm"}],"dependencies":[],"imports":[{"note":"Package exports a single default function. Default import works in both ESM and CommonJS.","wrong":"const { slang } = require('pg-slang')","symbol":"default","correct":"import slang from 'pg-slang'"},{"note":"CommonJS require returns the function directly; no named export.","wrong":"const { slang } = require('pg-slang')","symbol":"require","correct":"const slang = require('pg-slang')"},{"note":"No named export exists; use default import.","wrong":"import { slang } from 'pg-slang'","symbol":"default (ESM re-export)","correct":"import slang from 'pg-slang'"}],"quickstart":{"code":"// Map function: resolves 'food name' -> ['name'], 'calcium' -> ['ca', 'ca_e'], table 'apples' -> search condition\nconst slang = require('pg-slang');\nconst columns = { 'food name': ['name'], 'calcium': ['ca', 'ca_e'] };\nfunction myMapper(text, type, hint, from) {\n  if (type === 'column') return columns[text] || ['unknown'];\n  if (text === 'apples') return [`\"tsvector\" @@ '${text}'`];\n  return [`\"tsvector\" @@ '${text}'`];\n}\nslang(`SELECT \"food name\", \"calcium\" FROM \"apples\"`, myMapper, null, { from: 'compositions' }).then(console.log);\n// SELECT \"name\", \"ca\", \"ca_e\" FROM \"compositions\" WHERE TRUE AND (FALSE OR (\"tsvector\" @@ 'apples'))","lang":"javascript","description":"Converts informal SELECT with column mapping and table-based WHERE clause."},"warnings":[{"fix":"Ensure map function returns an array, e.g., return ['expression'].","message":"Map function must handle all four parameters (text, type, hint, from) and return an array of strings; returning a single string or non-array may cause errors.","severity":"gotcha","affected_versions":">=0.0.0"},{"fix":"Always return at least one expression per column, or handle gracefully.","message":"If map function returns empty array for a column, it may be silently dropped or cause malformed SQL.","severity":"gotcha","affected_versions":">=0.0.0"},{"fix":"Check type === 'from' or type === 'table' (whichever is documented) to identify table names.","message":"The 'from' parameter is null for table lookups; only 'type' distinguishes table from column.","severity":"gotcha","affected_versions":">=0.0.0"},{"fix":"Use const slang = require('pg-slang'); (no destructuring) or import slang from 'pg-slang'","message":"Using CommonJS require with destructuring ({ slang }) fails because package exports a function directly.","severity":"gotcha","affected_versions":">=0.0.0"}],"env_vars":null,"search_vec":"'0.2.6':36 'actual':49 'appl':15 'ca':22,23 'cadenc':39 'calcium':13 'callback':57 'column':75 'column/table':60 'composit':26 'convert':4 'databas':64 'decoupl':42 'deleg':52 'dictionari':66 'differenti':41 'dynam':59 'e':24 'e.g':9,19 'enabl':58 'extern':56 'face':45 'food':11 'formal':17,73 'function':34 'inform':5,46,72 'javascript':67 'key':40 'low':37 'map':33,53 'name':12,21 'pg':2,68 'pg-slang':1 'queri':47 'releas':38 'resolut':61 'schema':50 'select':7,10,20,71 'slang':3,69 'sql':6,18,70 'statement':8 'suppli':32 'tabl':74 'user':31,44 'user-fac':43 'user-suppli':30 'version':35 'via':28","created_at":"2026-06-05T17:00:29.303040+00:00","updated_at":"2026-06-05T17:00:29.303040+00:00","problems":[{"fix":"Use `const slang = require('pg-slang');`","cause":"Attempting to destructure require result as `const { slang } = require('pg-slang')`","error":"TypeError: slang is not a function"},{"fix":"Return an array, e.g., `return ['expression'];`","cause":"Returning a string or undefined instead of array","error":"Map function must return an array"},{"fix":"Ensure slang is the function returned by `require('pg-slang')` or default import","cause":"Calling `slang(...).then(...)` before properly importing slang function","error":"Cannot read properties of undefined (reading 'then')"}],"ecosystem":"npm","meta_description":null,"install_score":null,"quickstart_score":null,"quickstart_tag":null,"pypi_latest":null,"cli_name":null,"cli_version":null,"type":"library","homepage":"https://github.com/nodef/pg-slang#readme","github":"https://github.com/nodef/pg-slang","docs":null,"changelog":null,"pypi":null,"npm":"pg-slang","openapi_spec":null,"status_page":null,"smithery":null,"categories":["database"],"base_url":null,"auth_type":null,"provenance":{"verified_status":null,"verified_at":null,"last_verified":"2026-06-05","next_check":"2026-09-03","install_tag":null}}