{"id":22481454,"url":"https://github.com/arthur87/rossoc","last_synced_at":"2026-01-27T12:36:40.503Z","repository":{"id":236331751,"uuid":"784223900","full_name":"arthur87/rossoc","owner":"arthur87","description":"rossoc is an experimental project to generate code from sql.","archived":false,"fork":false,"pushed_at":"2025-01-05T13:43:46.000Z","size":139,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-11-08T22:14:16.487Z","etag":null,"topics":["arduino","mruby","mrubyc"],"latest_commit_sha":null,"homepage":"https://www.daispot.com","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/arthur87.png","metadata":{"files":{"readme":"README.base.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","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,"zenodo":null}},"created_at":"2024-04-09T12:37:40.000Z","updated_at":"2025-03-10T06:50:29.000Z","dependencies_parsed_at":"2024-04-26T16:32:06.171Z","dependency_job_id":"ad1c7c6c-4457-487c-ba55-c766eb877004","html_url":"https://github.com/arthur87/rossoc","commit_stats":null,"previous_names":["arthur87/rossoc"],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/arthur87/rossoc","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arthur87%2Frossoc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arthur87%2Frossoc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arthur87%2Frossoc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arthur87%2Frossoc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/arthur87","download_url":"https://codeload.github.com/arthur87/rossoc/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arthur87%2Frossoc/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28813215,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-27T12:25:15.069Z","status":"ssl_error","status_checked_at":"2026-01-27T12:25:05.297Z","response_time":168,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["arduino","mruby","mrubyc"],"created_at":"2024-12-06T16:12:52.278Z","updated_at":"2026-01-27T12:36:40.486Z","avatar_url":"https://github.com/arthur87.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!----------------------------\u003e\n\u003c!-- multilingual suffix: en, ja --\u003e\n\u003c!-- no suffix: en --\u003e\n\u003c!----------------------------\u003e\n\n\u003c!-- $ mmg README.base.md --\u003e\n\n\u003c!-- [ja] --\u003e\n# rossoc\n[![Gem Version](https://badge.fury.io/rb/rossoc.svg)](https://badge.fury.io/rb/rossoc)  \nrossoc はSQLからコードを生成する実験的なプロジェクトです。  \nSQLを mruby, mruby/c, と Arduino に変換します。 \n\n\u003c!-- [en] --\u003e\n# rossoc\n[![Gem Version](https://badge.fury.io/rb/rossoc.svg)](https://badge.fury.io/rb/rossoc)  \nrossoc is an experimental project to generate code from sql.  \nConverts sql to mruby, mruby/c, or Arduino source code.\n\n\u003c!-- [ja] --\u003e\n# ガイド\n例えば、`SELECT din11 FROM mruby WHERE ((din1 = 0 AND din2 \u003c= 1) OR din3 \u003c\u003e 9)` のようなSQLは以下のようなコードに変換されます。  \n\n\u003c!-- [en] --\u003e\n# Guide\nFor example, SQL like `SELECT din11 FROM mruby WHERE ((din1 = 0 AND din2 \u003c= 1) OR din3 \u003c\u003e 9)` is converted to source code like this:\n\n\u003c!-- [common] --\u003e\n```ruby\n# SELECT `din11` FROM `mruby` WHERE ((`din1` = 0 AND `din2` \u003c= 1) OR `din3` \u003c\u003e 9)\n\nGPIO.setmode(11, GPIO::IN)\nGPIO.setmode(1, GPIO::IN)\nGPIO.setmode(2, GPIO::IN)\nGPIO.setmode(3, GPIO::IN)\n\nuart1 = UART.new(1)\n\nwhile 1 do\n  din11 = GPIO.read(11)\n  din1 = GPIO.read(1)\n  din2 = GPIO.read(2)\n  din3 = GPIO.read(3)\n\n  if ((din1 == 0 \u0026\u0026 din2 \u003c= 1) || din3 != 9)\n    uart1.puts(\"din11=#{din11}\")\n  end\n\nend\n```\n\n\u003c!-- [ja] --\u003e\nこの mruby コードは次のコマンドで出力できます。  \n\n\u003c!-- [en] --\u003e\nThis mruby code can be output with the following command.\n\n\u003c!-- [common] --\u003e\n```bash\nrossoc query -i 'SELECT din11 FROM mruby WHERE ((din1 = 0 AND din2 \u003c= 1) OR din3 \u003c\u003e 9)' -o test.rb\n```\n\n\u003c!-- [ja] --\u003e\n`RSLEEP` は rossoc の独自キーワードです。 \nRSLEEPの単位は秒で、指定した秒数分、処理を停止します。\n\n\u003c!-- [en] --\u003e\n`RSLEEP` is the original keyword of rossoc. \nRSLEEP is measured in seconds, and processing will be suspended for the specified number of seconds.\n\n\u003c!-- [common] --\u003e\n```bash\nrossoc query -i 'SELECT din11 FROM mruby WHERE ((din1 = 0 AND din2 \u003c= 1) OR din3 \u003c\u003e 9) RSLEEP 100' -o test.rb\n```\n\n\u003c!-- [ja] --\u003e\n`RSLEEP` を使用したコードは以下のようになります。\n\n\u003c!-- [en] --\u003e\nThe code will look like this.\n\n\u003c!-- [common] --\u003e\n```ruby\n# SELECT `din11` FROM `mruby` WHERE ((`din1` = 0 AND `din2` \u003c= 1) OR `din3` \u003c\u003e 9) RSLEEP 100\n\nGPIO.setmode(11, GPIO::IN)\nGPIO.setmode(1, GPIO::IN)\nGPIO.setmode(2, GPIO::IN)\nGPIO.setmode(3, GPIO::IN)\n\nuart1 = UART.new(1)\n\nwhile 1 do\n  din11 = GPIO.read(11)\n  din1 = GPIO.read(1)\n  din2 = GPIO.read(2)\n  din3 = GPIO.read(3)\n\n  if ((din1 == 0 \u0026\u0026 din2 \u003c= 1) || din3 != 9)\n    uart1.puts(\"din11=#{din11}\")\n  end\n\n  sleep(100)\n\nend\n```\n\n```c\n// SELECT `din11` FROM `arduino` WHERE ((`din1` = 0 AND `din2` \u003c= 1) OR `din3` \u003c\u003e 9) RSLEEP 100\n\nvoid setup() {\n  Serial.begin(9600);\n  \n  pinMode(11, INPUT);\n  pinMode(1, INPUT);\n  pinMode(2, INPUT);\n  pinMode(3, INPUT);\n}\n\nvoid loop() {\n  \n  int din11 = digitalRead(11);\n  int din1 = digitalRead(1);\n  int din2 = digitalRead(2);\n  int din3 = digitalRead(3);\n\n\n  if((din1 == 0 \u0026\u0026 din2 \u003c= 1) || din3 != 9) {\n\n    Serial.print(\"din11=\");\n    Serial.println(din11);\n\n  }\n\n  \n  delay(100000);\n  \n}\n```\n\n\u003c!-- [ja] --\u003e\nrossoc は `SELECT` ステートメントのみサポートしています。  \nカラムには `din1` から `din20` と `ain1` から `ain20` を指定できます。dinはデジタルピン、ainはアナログピンです。  \nテーブル名には `mruby`, `arduino` と `dev` が指定できます。\nもし `dev` を指定したときシンプルなrubyコードを出力します。 このコードは物理的なボードを必要としません。\n\n\u003c!-- [en] --\u003e\nrossoc is only `SELECT` statements are supported.  \nThe values ​​that can be specified for the column name are `din1` to `din20` and `ain1` to `ain20`. din corresponds to digital pin, and ain corresponds to analog pin.  \nPossible values ​​for table name are `mruby`, `arduino` and `dev`.  \nIf you specify `dev`, simple ruby ​​code will be output and you can run it immediately without a board.\n\n\u003c!-- [ja] --\u003e\n# 参考\n\nこのプロジェクトでは以下の文献、コード等を参考にしています。  \n\n\u003c!-- [en] --\u003e\n# Reference\n\n\u003c!-- [common] --\u003e\nThe following code is included to extend sql: https://github.com/cryodex/sql-parser  \nmruby, mruby/c Common I/O API Guidelines and Community-developed Libraries: https://github.com/mruby/microcontroller-peripheral-interface-guide\n\n\u003c!-- [ja] --\u003e\n# アーキテクチャ\nrossoc はフロントエンドとバックエンドから構成されています。\n独自のIR(中間表現)を介してフロントエンドとバックエンドを接続しています。  \nフロントエンドは、字句、構文、意味解析を実行します。\nバックエンドは、ターゲットのコードを生成します。\n\n\u003c!-- [en] --\u003e\n# Architecture\nrossoc is composed of a front-end and a back-end.  \nAn original IR(Intermediate Representation) is used to connect the front-end and the back-end.  \nThe front-end performs lexical, syntactic and semantic analysis.  \nThe back-end generates code for the target.\n\n\u003c!-- [common] --\u003e\n```mermaid\nflowchart TB\n    input --\u003e FrontEnd\n    subgraph FrontEnd\n    parser --\u003e columns --\u003e tables --\u003e condition --\u003e rsleep\n    end\n    FrontEnd --\u003e IR --\u003e BackEnd\n    subgraph BackEnd\n    generate\n    write\n    end\n    write --\u003e output\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farthur87%2Frossoc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Farthur87%2Frossoc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farthur87%2Frossoc/lists"}