{"id":26039,"library":"odata-v4-sql","title":"odata-v4-sql","description":"An OData V4 request to SQL query compiler, converting OData query segments ($filter, $select, $skip, $top, $orderby, $expand) into SQL WHERE clauses or full SELECT statements. Version 0.1.2 is current, with basic support for $filter, $select, $skip, $top, $orderby, and $expand. It differs from alternatives by focusing solely on SQL generation, not full OData server implementations. Ships TypeScript types.","status":"active","version":"0.1.2","language":"javascript","source_language":"en","source_url":"https://github.com/jaystack/odata-v4-sql","tags":["javascript","OData","V4","sql","typescript"],"install":[{"cmd":"npm install odata-v4-sql","lang":"bash","label":"npm"},{"cmd":"yarn add odata-v4-sql","lang":"bash","label":"yarn"},{"cmd":"pnpm add odata-v4-sql","lang":"bash","label":"pnpm"}],"dependencies":[{"reason":"Parses OData query strings into AST for SQL compilation","package":"odata-v4-parser","optional":false}],"imports":[{"note":"ESM style requires destructuring; default export not available.","wrong":"const createFilter = require('odata-v4-sql')","symbol":"createFilter","correct":"import { createFilter } from 'odata-v4-sql'"},{"note":"Case-sensitive named export; export name is lower camelCase.","wrong":"import { CreateQuery } from 'odata-v4-sql'","symbol":"createQuery","correct":"import { createQuery } from 'odata-v4-sql'"},{"symbol":"OData2Filter","correct":"import { OData2Filter } from 'odata-v4-sql'"}],"quickstart":{"code":"import { createFilter } from 'odata-v4-sql';\n\n// Example OData $filter from request: \"Id eq 42 and Status eq 'active'\"\nconst filter = createFilter(\"Id eq 42 and Status eq 'active'\");\nconsole.log(filter.where); // WHERE clause: \"[Id] = 42 AND [Status] = 'active'\"\n// Use with your SQL driver:\n// db.query(`SELECT * FROM Users WHERE ${filter.where}`);","lang":"typescript","description":"Shows how to convert an OData $filter string into a SQL WHERE clause using the createFilter function."},"warnings":[{"fix":"Always validate or parameterize queries when combining with user input.","message":"The createFilter function does not sanitize input; SQL injection risk if used with raw user input.","severity":"gotcha","affected_versions":">0"},{"fix":"Use `createQuery` instead to generate full SELECT statements.","message":"The `from` method on the filter result is deprecated.","severity":"deprecated","affected_versions":">=0.1.0"},{"fix":"Update calls to pass options object: createFilter(filterString, options).","message":"In version 0.1.0, the `createFilter` signature changed from accepting a single parameter to requiring an options object.","severity":"breaking","affected_versions":"<0.1.0"},{"fix":"Use alternative packages or manually implement unsupported features.","message":"Only $filter, $select, $skip, $top, $orderby, and $expand are supported; $count, $search, $apply are not implemented.","severity":"gotcha","affected_versions":">0"}],"env_vars":null,"last_verified":"2026-05-01T00:00:00.000Z","next_check":"2026-07-30T00:00:00.000Z","problems":[{"fix":"Run npm install odata-v4-sql","cause":"Package not installed or typo in package name.","error":"Cannot find module 'odata-v4-sql'"},{"fix":"Use import { createFilter } from 'odata-v4-sql'","cause":"Default import used instead of named import.","error":"createFilter is not a function"},{"fix":"Use createQuery instead of filter.from()","cause":"Using deprecated `from` method on filter object.","error":"TypeError: filter.from is not a function"},{"fix":"Validate filter string against OData spec or use odata-v4-parser for better error messages.","cause":"Invalid OData filter syntax passed to createFilter.","error":"Unexpected token in OData filter"}],"ecosystem":"npm","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null}