icon

なんか変なところにファイル作ってて草

icon

型定義が完璧だ これを求めてた

icon
Web site image
SQL Fiddle | A tool for easy online testing and sharing of database problems and their solutions.
icon

サブクエリ対応したぞ
IDが 2 のユーザーがフォローしているユーザーをすべて取得するクエリ

Attach image
icon

テーマコード解析して動的に見た目を再現するのは

icon

良い感じ

const sql = Q.And(q => [
    q.Equal('name', 'alice'),
    q.NotEqual('age', 42),
    q.Or([
        q.Equal('id', 1),
        q.Equal('id', 2),
        q.In('id', [7, 8, 9])
    ])
]);

icon

最終的にこんな感じに
https://pastebin.com/xH9VH2hD

Web site image
const Q = { And: (fn: (q: QueryBuilder) => string[]): string => { con - Pastebin.com
icon

こう書けば解決した

Attach image
icon

@megumeru@misskey.dev ニンテンドーDSでプログラム書けるソフトみたいなのがあってそれやり始めたのがきっかけ
その後 VB --> PHP, JS --> C# --> TypeScript みたいな流れだった気がする

icon

ふ=む

Attach image
icon

And または OR を入れ子にしたときの型がおかしいぞ(動作は正常)

icon

SQLジェネレータのプロトタイプできた
遊んでみて
https://bit.ly/2HQvUN9

Web site image
https://bit.ly/2HQvUN9 https://www.typescriptlang.org/play/#src=function%20sanitize(text:%20string):%20string%20%7B%0D%0A%09return%20text;%20//%20TODO%0D%0A%7D%0D%0A%0D%0Atype%20QueryBuilder%3CT%3E%20=%20%7B%0D%0A%09Equal:%20%3CP%20extends%20keyof%20T%3E(column:%20P,%20value:%20T%5BP%5D)%20=%3E%20string;%0D%0A%09NotEqual:%20%3CP%20extends%20keyof%20T%3E(column:%20P,%20value:%20T%5BP%5D)%20=%3E%20string;%0D%0A%09And:%20%3CT%3E(fn:%20(q:%20QueryBuilder%3CT%3E)%20=%3E%20string%5B%5D)%20=%3E%20string;%0D%0A%09Or:%20%3CT%3E(fn:%20(q:%20QueryBuilder%3CT%3E)%20=%3E%20string%5B%5D)%20=%3E%20string;%0D%0A%7D;%0D%0A%0D%0Alet%20ops%20=%20%7B%7D%20as%20any;%0D%0A%0D%0Aconst%20And%20=%20%3CT%3E(fn:%20(q:%20QueryBuilder%3CT%3E)%20=%3E%20string%5B%5D):%20string%20=%3E%20%7B%0D%0A%09const%20sqls%20=%20fn(ops);%0D%0A%09return%20''(''%20%2B%20sqls.join(''%20AND%20'')%20%2B%20'')'';%0D%0A%7D;%0D%0Aops.And%20=%20And;%0D%0A%0D%0Aconst%20Or%20=%20%3CT%3E(fn:%20(q:%20QueryBuilder%3CT%3E)%20=%3E%20string%5B%5D):%20string%20=%3E%20%7B%0D%0A%09const%20sqls%20=%20fn(ops);%0D%0A%09return%20''(''%20%2B%20sqls.join(''%20OR%20'')%20%2B%20'')'';%0D%0A%7D;%0D%0Aops.Or%20=%20Or;%0D%0A%0D%0Aconst%20Equal%20=%20(column:%20string,%20value:%20any):%20string%20=%3E%20%7B%0D%0A%09return%20%60%22$%7Bcolumn%7D%22%20=%20''$%7Bsanitize(value)%7D''%60;%0D%0A%7D;%0D%0Aops.Equal%20=%20Equal;%0D%0A%0D%0Aconst%20NotEqual%20=%20(column:%20string,%20value:%20any):%20string%20=%3E%20%7B%0D%0A%09return%20%60%22$%7Bcolumn%7D%22%20!=%20''$%7Bsanitize(value)%7D''%60;%0D%0A%7D;%0D%0Aops.NotEqual%20=%20NotEqual;%0D%0A%0D%0Atype%20User%20=%20%7B%0D%0A%09id:%20number;%0D%0A%09age:%20number;%0D%0A%09name:%20string;%0D%0A%7D;%0D%0A%0D%0Aconst%20sql%20=%20And%3CUser%3E(q%20=%3E%20%5B%0D%0A%09q.Equal(''name'',%20''alice''),%0D%0A%09q.NotEqual(''age'',%2042)%0D%0A%5D);%0D%0A%0D%0Aalert(sql);%0D%0A
TS Playground - An online editor for exploring TypeScript and JavaScript
icon

型定義がどうなっているかというと:

Attach image
icon

良くない?
ちゃんと型定義効いてるよ
例えば q.Equal('name', 42) みたいにカラム名と型が一致していない場合は怒られるし、q.Equal('foo', 'alice') みたいにそもそも存在しないカラム名を指定しても怒られる

Attach image
icon

MongoDB風クエリをSQLに変換するライブラリ作ってる

Attach image
icon

同じデータベースに接続できているのかしら

icon

どういうことでしょう

icon

内部的にSQLを使うのは別にいいんだけどプログラマがSQLを書くのは辛い
繰り返すけど型定義と相性が悪いから

icon

MongoDBみたいに型定義を活かせるようなクエリの書き方にしてほしかった

icon
Web site image
TypeORM - Amazing ORM for TypeScript and JavaScript (ES7, ES6, ES5). Supports MySQL, PostgreSQL, MariaDB, SQLite, MS SQL Server, Oracle, WebSQL databases. Works in NodeJS, Browser, Ionic, Cordova and Electron platforms.
icon

ORMがSQL書くことを強要してくる

icon

MongoDBのクエリをSQLに変換するライブラリでも作るか

icon

クエリという面ではMongoDBは非常に分かりやすい

icon

型定義が無になる

icon

SQL描きたくない

icon

.

Attach image
icon

きゃー

icon

前衛的

icon

聴いてもつまらないけど見た目で楽しい曲作りたい

icon

.

Attach image
icon

スペアナで見たら面白そう

icon

SQL、静的型付け言語との相性が悪すぎる

icon

SQLやだー

icon

ひーっ

Attach image
icon

藍.moe はメモリ1GBだったような

icon

icon

帰宅

icon

帰ってる

icon

.

Attach image
icon

しゅい散歩

icon

散歩