{"id":25257509,"url":"https://github.com/czproject/sql-generator","last_synced_at":"2025-10-27T02:31:52.960Z","repository":{"id":56961072,"uuid":"73787307","full_name":"czproject/sql-generator","owner":"czproject","description":"Library for generating of SQL in PHP.","archived":false,"fork":false,"pushed_at":"2023-07-27T07:32:48.000Z","size":78,"stargazers_count":10,"open_issues_count":0,"forks_count":4,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-02T22:32:42.538Z","etag":null,"topics":["php","sql","sql-generation"],"latest_commit_sha":null,"homepage":"","language":"PHP","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/czproject.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":".github/funding.yml","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},"funding":{"custom":"https://www.janpecha.cz/donate/"}},"created_at":"2016-11-15T07:22:10.000Z","updated_at":"2024-07-01T13:41:46.000Z","dependencies_parsed_at":"2024-06-21T17:52:34.061Z","dependency_job_id":null,"html_url":"https://github.com/czproject/sql-generator","commit_stats":{"total_commits":44,"total_committers":1,"mean_commits":44.0,"dds":0.0,"last_synced_commit":"7d5e59bedded80a165affbd53bd31d9053fa9679"},"previous_names":[],"tags_count":14,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/czproject%2Fsql-generator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/czproject%2Fsql-generator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/czproject%2Fsql-generator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/czproject%2Fsql-generator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/czproject","download_url":"https://codeload.github.com/czproject/sql-generator/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":238424920,"owners_count":19470210,"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":["php","sql","sql-generation"],"created_at":"2025-02-12T06:40:15.601Z","updated_at":"2025-10-27T02:31:52.954Z","avatar_url":"https://github.com/czproject.png","language":"PHP","readme":"# CzProject\\SqlGenerator\n\n[![Build Status](https://github.com/czproject/sql-generator/workflows/Build/badge.svg)](https://github.com/czproject/sql-generator/actions)\n[![Downloads this Month](https://img.shields.io/packagist/dm/czproject/sql-generator.svg)](https://packagist.org/packages/czproject/sql-generator)\n[![Latest Stable Version](https://poser.pugx.org/czproject/sql-generator/v/stable)](https://github.com/czproject/sql-generator/releases)\n[![License](https://img.shields.io/badge/license-New%20BSD-blue.svg)](https://github.com/czproject/sql-generator/blob/master/license.md)\n\n\u003ca href=\"https://www.janpecha.cz/donate/\"\u003e\u003cimg src=\"https://buymecoffee.intm.org/img/donate-banner.v1.svg\" alt=\"Donate\" height=\"100\"\u003e\u003c/a\u003e\n\n\n## Installation\n\n[Download a latest package](https://github.com/czproject/sql-generator/releases) or use [Composer](http://getcomposer.org/):\n\n```\ncomposer require czproject/sql-generator\n```\n\n`CzProject\\SqlGenerator` requires PHP 8.0 or later.\n\n\n## Usage\n\n``` php\nuse CzProject\\SqlGenerator\\Drivers;\nuse CzProject\\SqlGenerator\\SqlDocument;\n\n$sql = new SqlDocument;\n$driver = new Drivers\\MysqlDriver;\n\n$contactTable = $sql-\u003ecreateTable('contact')\n\t-\u003esetComment('Clients table.')\n\t-\u003esetOption('ENGINE', 'InnoDB');\n$contactTable-\u003eaddColumn('id', 'INT', NULL, array('UNSIGNED' =\u003e NULL))\n\t-\u003esetAutoIncrement();\n$contactTable-\u003eaddColumn('name', 'VARCHAR(100)')\n\t-\u003esetComment('Client name');\n$contactTable-\u003eaddColumn('surname', 'VARCHAR(100)');\n$contactTable-\u003eaddColumn('active', 'unsigned TINYINT')\n\t-\u003esetDefaultValue(TRUE);\n$contactTable-\u003eaddColumn('created', 'DATETIME');\n$contactTable-\u003eaddColumn('removed', 'DATETIME')\n\t-\u003esetNullable();\n\n$contactTable-\u003eaddIndex(NULL, IndexDefinition::TYPE_PRIMARY)\n\t-\u003eaddColumn('id');\n\n$contactTable-\u003eaddIndex('name_surname', IndexDefinition::TYPE_UNIQUE)\n\t-\u003eaddColumn('name', 'ASC', 100)\n\t-\u003eaddColumn('surname', 'DESC', 100);\n\n$output = $sql-\u003etoSql($driver);\n```\n\nOutputs:\n\n``` sql\nCREATE TABLE `contact` (\n\t`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,\n\t`name` VARCHAR(100) NOT NULL COMMENT 'Client name',\n\t`surname` VARCHAR(100) NOT NULL,\n\t`active` TINYINT(1) UNSIGNED NOT NULL DEFAULT 1,\n\t`created` DATETIME NOT NULL,\n\t`removed` DATETIME NULL,\n\tPRIMARY KEY (`id`),\n\tUNIQUE KEY `name_surname` (`name` (100), `surname` (100) DESC)\n)\nCOMMENT 'Clients table.'\nENGINE=InnoDB;\n```\n\n\n## Statements\n\nThere is few predefined statements:\n\n```php\n$sql-\u003ecreateTable($tableName);\n$sql-\u003edropTable($tableName);\n$sql-\u003erenameTable($old, $new);\n$sql-\u003ealterTable($tableName);\n$sql-\u003einsert($tableName, $data);\n$sql-\u003ecommand($command); // for example $sql-\u003ecommand('SET NAMES \"utf8\"');\n$sql-\u003ecomment($comment);\n```\n\nYou can add custom statements:\n\n```php\n$sql-\u003eaddStatement(new Statements\\CreateTable($tableName));\n```\n\nCheck if is SQL document empty:\n\n```php\n$sql-\u003eisEmpty();\n```\n\nGenerate SQL:\n\n```php\n$sql-\u003etoSql($driver); // returns string\n$sql-\u003egetSqlQueries($driver); // returns string[]\n$sql-\u003esave($file, $driver); // saves SQL into file\n```\n\n## Special Values\n\nThere are value objects for specific cases:\n\n### TableName\n\nDelimited table name.\n\n```php\nuse CzProject\\SqlGenerator\\TableName;\n\n$table = $sql-\u003ecreateTable(TableName::create('schema.table'))\n$table-\u003eaddForeignKey('fk_table_id', 'id', TableName::create('schema2.table2'), 'id');\n// and more ($sql-\u003erenameTable(),...)\n```\n\n\n### Value\n\nScalar/stringable/datetime value. It can be used in option values.\n\n```php\nuse CzProject\\SqlGenerator\\Value;\n\n$table-\u003esetOption('AUTO_INCREMENT', Value::create(123)); // generates AUTO_INCREMENT=123\n$table-\u003esetOption('CHECKSUM', Value::create(FALSE)); // generates CHECKSUM=0\n$table-\u003esetOption('COMPRESSION', Value::create('NONE')); // generates COMPRESSION='NONE'\n```\n\n\n## Supported database\n\nCurrently is supported common SQL and MySQL.\n\n\n------------------------------\n\nLicense: [New BSD License](license.md)\n\u003cbr\u003eAuthor: Jan Pecha, https://www.janpecha.cz/\n","funding_links":["https://www.janpecha.cz/donate/"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fczproject%2Fsql-generator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fczproject%2Fsql-generator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fczproject%2Fsql-generator/lists"}