Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What is going on with this article?
@hosokawat

SQLコーディングを時短できるZenQueryを作りました!

SQLiteクライアント Reasonのv0.0.9で、
SQLのコーディングを時短できるZenQueryという機能をリリースしました。

ダウンロードはこちらから

ZenQueryとは

愛用しているemmetをお手本としたDDLを短い構文で書くことができる機能です。

作ったきっかけ

SQLiteクライアントのReasonではエディタを使ってDBの操作することの効率化を目指しています。

Reasonを使って一通りの操作を行うユースケースを想像した時、テーブルに対してのデータ操作を行う機能は整ってきているのですが、その前段階となるテーブル自体を操作する機能は貧弱です。
なので、DMLのクエリーを書く良い方法が必要だと考えました。
エディタで実現する方法を考えたときemmetをお手本に作ってみることにしました。

使い方

現在のところ

  • create table
  • alter table
    • テーブル名変更
    • カラム名変更
    • カラム追加

をサポートしています。
ZenQueryでコーディングした後、展開することで実行可能になります。

展開方法

ZenQueryコードの中でShift+tabキーを押します。
文の区切りは;をサポートしていてZenQuery中では単語間の改行もサポートしています。

文法/書き方

create table

create table テーブル名(カラム情報...)

カラム名はカンマ区切りで複数指定できます。
一つ目のカラムは自動的にプライマリーキーとなり、型がINTEGERであればAUTOINCREMENTが有効になります。

example
create table test(id,'name')

展開後

CREATE TABLE 'test' (
    'id' integer PRIMARY KEY AUTOINCREMENT NOT NULL,
    'name' text NOT NULL
);

alter table

テーブル名変更

alter table {現テーブル名,変更後テーブル名}
example

テーブル名yamaからkawaに変更するときには次のように書きます。

alter table {yama,kawa}

展開後

alter table 'yama' rename to 'kawa';

カラム名変更

alter table テーブル名{現テーブル名,変更後テーブル名}

example
alter table person{denwa,tel}

展開後

alter table 'person' rename column 'denwa'  to 'tel';

カラム追加

alter table テーブル名 << カラム情報

example
alter table person << 'email'

展開後

alter table 'person' add column 'email' text;

create index

インデックス作成

create index インデックス名 テーブル名(カラム名)
example

テーブル名personのgenderにidx_person_genderという名前のindexを貼る場合には次のように書きます。

create index idx_person_gender person(gender)

展開後

CREATE INDEX  'idx_person_gender' 
ON  'person' ('gender');

カラム情報

カラム情報にはカラム名の制約も表現できます。

わかりづらいのでテーブル名colに対しての設定を行うという例で解説します。
これらは、組み合わせて使うことができます。

現在!*[]#は予約語として文字列の中でも使うことができません。

型指定
col[]
未指定はintegerになります。

型指定(text)
'col'
利用頻度の高いtextはさらなるシンタックスシュガーを用意しました。

nullable(カラム追加では強制ON、SQLite3からの制約)
!col

ユニーク
*col

デフォルト値

col=10
col=str -- (シングルクオートは型連動で自動設定)
col[integer]=0 -- (型は先に指定する)

まとめ

今後も便利な機能を実装していきます。
ZenQuery、そしてReasonを使ってSQLiteの作業を効率的に行いましょう!

ダウンロードはこちらから!

1
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
1
Help us understand the problem. What is going on with this article?