23:58:27 @syuilo@misskey.xyz
icon

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

23:55:09 @syuilo@misskey.xyz
icon

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

23:52:15 @syuilo@misskey.xyz
icon
Web site image
SQL Fiddle | A tool for easy online testing and sharing of database problems and their solutions.
23:51:07 @syuilo@misskey.xyz
icon

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

Attach image
23:26:08 @syuilo@misskey.xyz
icon

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

23:19:25 @syuilo@misskey.xyz
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])
    ])
]);

23:18:01 @syuilo@misskey.xyz
icon

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

Web site image
const Q = { And: (fn: (q: QueryBuilder) => string[]): string => { con - Pastebin.com
22:36:05 @syuilo@misskey.xyz
icon

こう書けば解決した

Attach image
22:34:48 @syuilo@misskey.xyz
icon

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

22:32:11 @syuilo@misskey.xyz
icon

ふ=む

Attach image
22:29:37 @syuilo@misskey.xyz
icon

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

22:26:52 @syuilo@misskey.xyz
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
22:07:36 @syuilo@misskey.xyz
icon

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

Attach image
22:05:36 @syuilo@misskey.xyz
icon

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

Attach image
21:32:43 @syuilo@misskey.xyz
icon

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

Attach image
21:12:34 @syuilo@misskey.xyz
icon

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

21:11:23 @syuilo@misskey.xyz
icon

どういうことでしょう

21:10:38 @syuilo@misskey.xyz
icon

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

21:08:29 @syuilo@misskey.xyz
icon

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

21:07:08 @syuilo@misskey.xyz
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.
21:02:58 @syuilo@misskey.xyz
icon

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

20:54:52 @syuilo@misskey.xyz
icon

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

20:54:24 @syuilo@misskey.xyz
icon

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

20:50:58 @syuilo@misskey.xyz
icon

型定義が無になる

20:49:49 @syuilo@misskey.xyz
icon

SQL描きたくない

20:29:42 @syuilo@misskey.xyz
icon

.

Attach image
20:12:00 @syuilo@misskey.xyz
icon

きゃー

20:09:51 @syuilo@misskey.xyz
icon

前衛的

20:09:28 @syuilo@misskey.xyz
icon

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

20:06:30 @syuilo@misskey.xyz
icon

.

Attach image
20:05:35 @syuilo@misskey.xyz
icon

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

20:04:19 @syuilo@misskey.xyz
icon

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

20:03:56 @syuilo@misskey.xyz
icon

SQLやだー

20:03:31 @syuilo@misskey.xyz
icon

ひーっ

Attach image
19:54:27 @syuilo@misskey.xyz
icon

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

12:44:30 @syuilo@misskey.xyz
icon

12:40:48 @syuilo@misskey.xyz
icon

帰宅

12:34:07 @syuilo@misskey.xyz
icon

帰ってる

12:00:59 @syuilo@misskey.xyz
icon

.

Attach image
11:42:02 @syuilo@misskey.xyz
icon

しゅい散歩

11:41:02 @syuilo@misskey.xyz
icon

散歩

10:52:08 @syuilo@misskey.xyz