{"id":15527577,"url":"https://github.com/elliotchance/sqlite3x","last_synced_at":"2025-08-01T15:33:39.227Z","repository":{"id":137291196,"uuid":"250907793","full_name":"elliotchance/sqlite3x","owner":"elliotchance","description":"100% compatible sqlite3 fork with more features","archived":false,"fork":false,"pushed_at":"2020-04-19T16:55:30.000Z","size":80479,"stargazers_count":10,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-29T23:41:12.914Z","etag":null,"topics":["sqlite3","sqlite3-amalgamation","sqlite3-codebase","sqlite3-database"],"latest_commit_sha":null,"homepage":null,"language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/elliotchance.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-03-28T22:39:39.000Z","updated_at":"2021-05-31T08:52:57.000Z","dependencies_parsed_at":null,"dependency_job_id":"03a8f7eb-3b43-4780-bcf5-8a0d9be48347","html_url":"https://github.com/elliotchance/sqlite3x","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elliotchance%2Fsqlite3x","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elliotchance%2Fsqlite3x/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elliotchance%2Fsqlite3x/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elliotchance%2Fsqlite3x/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/elliotchance","download_url":"https://codeload.github.com/elliotchance/sqlite3x/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250433666,"owners_count":21429920,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["sqlite3","sqlite3-amalgamation","sqlite3-codebase","sqlite3-database"],"created_at":"2024-10-02T11:07:22.657Z","updated_at":"2025-04-23T12:28:45.361Z","avatar_url":"https://github.com/elliotchance.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# sqlite3x [![Build Status](https://travis-ci.org/elliotchance/sqlite3x.svg?branch=master)](https://travis-ci.org/elliotchance/sqlite3x)\n\n   * [Overview](#overview)\n   * [Features](#features)\n      * [Added Functions](#added-functions)\n         * [acos(X)](#acosx)\n         * [asin(X)](#asinx)\n         * [atan(X)](#atanx)\n         * [atan2(Y,X)](#atan2yx)\n         * [ceil(X)](#ceilx)\n         * [cos(X)](#cosx)\n         * [cosh(X)](#coshx)\n         * [e()](#e)\n         * [exp(X)](#expx)\n         * [floor(X)](#floorx)\n         * [log(X)](#logx)\n         * [log10(X)](#log10x)\n         * [pi()](#pi)\n         * [pow(X,Y)](#powxy)\n         * [sin(X)](#sinx)\n         * [sinh(X)](#sinhx)\n         * [sqrt(X)](#sqrtx)\n         * [tan(X)](#tanx)\n         * [tanh(X)](#tanhx)\n   * [Building From Source](#building-from-source)\n      * [Binary Client](#binary-client)\n      * [Amalgamation Source](#amalgamation-source)\n   * [Testing](#testing)\n   * [Updating SQLite3 Core](#updating-sqlite3-core)\n\n\nOverview\n========\n\nsqlite3x is a fork of the sqlite3 codebase that provides 100% compatibility with\nsqlite3. Data read or modified in either sqlite3 ot sqlite3x is always\ncompatible with the other one.\n\nsqlite3x is kept up to date with the latest sqlite3 codebase and contains\nmodifications that sit on top of the engine, such as new functions.\n\nThe only compatibility issues will be that if you use sqlite3x functions, they\nwill obviously not be available for use in queries on a vanilla sqlite3 command\nline or linked library.\n\n\nFeatures\n========\n\nAdded Functions\n---------------\n\nOn top of the [sqlite3 built-in functions](\nhttps://www.sqlite.org/lang_corefunc.html), sqlite3x adds:\n\n### acos(X)\n\nacos(X) returns the arc-cosine of *X*. If *X* is `NULL`, then the result will be\n`NULL`.\n\nIf *X* not numeric then it will be treated internally as `0.0`. This will\nproduce a result of `1.5707963267949`.\n\n### asin(X)\n\nasin(X) returns the arc-sine of *X*. If *X* is `NULL`, then the result will be\n`NULL`.\n\nIf *X* not numeric then it will be treated internally as `0.0`. This will\nproduce a result of `0.0`.\n\n### atan(X)\n\natan(X) returns the arc-tangent of *X*. If *X* is `NULL`, then the result will\nbe `NULL`.\n\nIf *X* not numeric then it will be treated internally as `0.0`. This will\nproduce a result of `0.0`.\n\n### atan2(Y,X)\n\natan2(Y,X) returns arc-tangent with *Y* and *X*. `NULL` is returned if either of\nthe inputs are `NULL`.\n\nYou should be careful that inputs are valid and sensible. atan2(Y,X) does not\nprovide any protection for values that are invalid (not valid numbers).\n\n### ceil(X)\n\nceil(X) rounds *X* upward, returning the smallest integral value that is not\nless than *X*. If *X* is `NULL`, then the result will be `NULL`, otherwise the\nresult will always be a floating-point value.\n\nIf *X* not numeric then it will be treated internally as `0.0`. This will\nproduce a result of `0.0`.\n\n### cos(X)\n\ncos(X) returns the cosine of *X* (*X* is expressed in radians). If *X* is\n`NULL`, then the result will be `NULL`.\n\nIf *X* not numeric then it will be treated internally as `0.0`. This will\nproduce a result of `1.0`.\n\n### cosh(X)\n\ncosh(X) returns the hyperbolic cosine of *X*. If *X* is `NULL`, then the result\nwill be `NULL`.\n\nIf *X* not numeric then it will be treated internally as `0.0`. This will\nproduce a result of `0.0`.\n\n### e()\n\ne() returns the value of e, which is approximately 2.71828.\n\n### exp(X)\n\nexp(X) returns *e* to the power of *X*. If *X* is `NULL`, then the result will\nbe `NULL`.\n\nIf *X* not numeric then it will be treated internally as `0.0`. This will\nproduce a result of `1.0`.\n\nexp(X) does not provide any protection for result values that are too small or\nlarge (overflow) will have unexpected behavior depending on your system.\n\n### floor(X)\n\nfloor(X) rounds *X* downward, returning the largest integral value that is not\ngreater than *X*. If *X* is `NULL`, then the result will be `NULL`, otherwise\nthe result will always be a floating-point value.\n\nIf *X* not numeric then it will be treated internally as `0.0`. This will\nproduce a result of `0.0`.\n\n### log(X)\n\nlog(X) returns natural logarithm (base *e*) of *X*. If *X* is `NULL`, then the\nresult will be `NULL`.\n\nIf *X* not numeric then it will be treated internally as `0.0`. This will\nproduce a result of `-Inf`.\n\n### log10(X)\n\nlog10(X) returns common logarithm (base 10) of *X*. If *X* is `NULL`, then the\nresult will be `NULL`.\n\nIf *X* not numeric then it will be treated internally as `0.0`. This will\nproduce a result of `-Inf`.\n\n### pi()\n\npi() returns the value of pi, which is approximately 3.14159.\n\n### pow(X,Y)\n\npow(X,Y) returns *X* to the power of *Y*. The result is always a floating-point\nvalue. `NULL` is returned if either of the inputs are `NULL`.\n\nYou should be careful that inputs are valid and sensible. pow(X,Y) does not\nprovide any protection for values that are invalid (not valid numbers). Result\nvalues that are too small or large (overflow) will have unexpected behavior\ndepending on your system.\n\n### sin(X)\n\nsin(X) returns the sine of *X* (*X* is expressed in radians). If *X* is `NULL`,\nthen the result will be `NULL`.\n\nIf *X* not numeric then it will be treated internally as `0.0`. This will\nproduce a result of `0.0`.\n\n### sinh(X)\n\nsinh(X) returns the hyperbolic sine of *X*. If *X* is `NULL`, then the result\nwill be `NULL`.\n\nIf *X* not numeric then it will be treated internally as `0.0`. This will\nproduce a result of `0.0`.\n\n### sqrt(X)\n\nsqrt(X) returns the square root of *X*. If *X* is `NULL`, then the result will\nbe `NULL`.\n\nIf *X* not numeric then it will be treated internally as `0.0`. This will\nproduce a result of `0.0`.\n\n### tan(X)\n\ntan(X) returns the tangent of *X* (*X* is expressed in radians). If *X* is\n`NULL`, then the result will be `NULL`.\n\nIf *X* not numeric then it will be treated internally as `0.0`. This will\nproduce a result of `0.0`.\n\n### tanh(X)\n\ntanh(X) returns the hyperbolic tangent of *X*. If *X* is `NULL`, then the result\nwill be `NULL`.\n\nIf *X* not numeric then it will be treated internally as `0.0`. This will\nproduce a result of `0.0`.\n\n\nBuilding From Source\n====================\n\nSince sqlite3x inherits all of the source code from sqlite3, it also inherits\nthe build and test system that has been designed to work with many operating\nsystems.\n\nEven though the process is the same (all of the documentation on sqlite.org can\nbe used), keep in mind that extra targets have been added with an \"x\" on the\nend. This is so source and binaries that are distributed will not get confused\nor replace any vanilla version of sqlite3.\n\nYou can clone this repository, or download a [zip of the latest stable\ncode](https://github.com/elliotchance/sqlite3x/archive/master.zip).\n\nBinary Client\n-------------\n\nThe binary client is the interactive shell you can use in your terminal to\noperate sqlite3 databases. It can be built and updated with:\n\n```bash\n./configure\nmake sqlite3x       # For macOS and linux.\nmake sqlite3x.exe   # For windows.\n\n# You may want to move the binary into $PATH so it can be used anywhere.\n```\n\nAmalgamation Source\n-------------------\n\nThe amalgamation source is the most recommended way to integrate with your\nexisting source/application. Use make to produce two files that can be included\nin your project:\n\n```bash\n./configure\nmake sqlite3x.c sqlite3x.h\n```\n\nTesting\n=======\n\nRunning the full test suite is recommended before integrating sqlite3x into your\napplication.\n\nThe full test suite (including TCL tests for both core and sqlite3x) can be run\nwith:\n\n```bash\nmake test\n```\n\nIt can take some time to run the full suite. If you want to run a specific test\nyou can use:\n\n```bash\nmake testfixture \u0026\u0026 ./testfixture test/main.test\n```\n\nUpdating SQLite3 Core\n=====================\n\nAs new versions of sqlite3 are released, the core source code can be updated\nwith:\n\n```bash\nfossil clone https://www.sqlite.org/src sqlite.fossil\nfossil open sqlite.fossil\nfossil update release\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Felliotchance%2Fsqlite3x","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Felliotchance%2Fsqlite3x","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Felliotchance%2Fsqlite3x/lists"}