Parrot ไลบรารีใหม่สำหรับภาษาโปรแกรม Gleam ได้รับการยอมรับให้เป็นโปรเจกต์ชุมชนอย่างเป็นทางการบนเว็บไซต์ sqlc การพัฒนานี้ถือเป็นก้าวสำคัญสำหรับนักพัฒนาที่ต้องการการเชื่อมต่อฐานข้อมูลแบบ type-safe ในแอปพลิเคชัน Gleam
Gleam เป็นภาษาโปรแกรมเชิงฟังก์ชันแบบ statically-typed ที่ทำงานบน Erlang Virtual Machine และสามารถคอมไพล์เป็น JavaScript ได้ ภาษานี้มี type safety ที่แข็งแกร่งในขณะที่ยังคงคุณลักษณะ fault-tolerance ของระบบนิเวศ BEAM ไว้ Parrot ใช้ประโยชน์จาก sqlc ซึ่งเป็นเครื่องมือสร้างโค้ด SQL ที่ได้รับความนิยม เพื่อนำการตรวจสอบ SQL query แบบ compile-time มาสู่โปรเจกต์ Gleam
ความกระตือรือร้นของชุมชนต่อแนวทาง sqlc-Style
ชุมชนนักพัฒนาแสดงการสนับสนุนอย่างแข็งแกร่งต่อวิธีการของ sqlc ที่ Parrot นำมาใช้ นักพัฒนาหลายคนชื่นชมแนวทางนี้ที่ช่วยให้พวกเขาเขียน SQL queries แบบบริสุทธิ์ในไฟล์แยกต่างหากในขณะที่ยังคง type safety เต็มรูปแบบไว้ สิ่งนี้ตรงกันข้ามกับโซลูชัน Object-Relational Mapping (ORM) ซึ่งมักจะมีปัญหาในการจับคู่ความสามารถในการแสดงออกของ SQL และอาจสร้าง performance overhead
ไลบรารีจะสร้างฟังก์ชัน Gleam จาก SQL queries โดยอัตโนมัติ พร้อมด้วยชื่อพารามิเตอร์และประเภทการส่งคืนที่เหมาะสม ตัวอย่างเช่น query ชื่อ FindUser ที่มี SELECT * FROM user WHERE username = $1 จะกลายเป็นฟังก์ชัน Gleam find_user(username: String) พร้อมพารามิเตอร์และผลลัพธ์ที่มีประเภทที่เหมาะสม
คุณสมบัติหลัก:
- รองรับการใช้งานหลายคิวรีต่อไฟล์
- ออกแบบให้ไม่ขึ้นกับไคลเอนต์ฐานข้อมูลใดเฉพาะ
- ตรวจจับสคีมาอัตโนมัติ
- พารามิเตอร์ที่มีชื่อพร้อมการอนุมานประเภทข้อมูล
- ยูทิลิตี้แรปเปอร์สำหรับไลบรารีฐานข้อมูล Gleam ยอดนิยม
การสนับสนุนฐานข้อมูลและการรวมระบบ
Parrot รองรับระบบฐานข้อมูลหลักสามระบบที่ sqlc จัดการ ได้แก่ PostgreSQL, MySQL และ SQLite ไลบรารีรวมถึง utility wrappers สำหรับไลบรารีฐานข้อมูล Gleam ที่ได้รับความนิยม เช่น lpil/sqlight และ lpil/pog ทำให้การรวมระบบเป็นเรื่องง่ายสำหรับโปรเจกต์ที่มีอยู่แล้ว
ข้อจำกัดที่น่าสังเกตคือ Parrot สามารถทำงานได้เฉพาะในแอปพลิเคชัน Gleam ที่ใช้ Erlang เท่านั้น แม้ว่าโค้ดที่สร้างขึ้นจะทำงานในสภาพแวดล้อม JavaScript ได้ ซึ่งหมายความว่าโปรเจกต์ JavaScript ต้องการขั้นตอนการสร้างแยกต่างหากเพื่อสร้างโมดูลโค้ดที่จำเป็น
ฐานข้อมูลที่รองรับ:
- SQLite (ต้องติดตั้ง sqlite3 )
- PostgreSQL (ต้องติดตั้ง pg_dump )
- MySQL (ต้องติดตั้ง mysqldump )
ข้อจำกัดทางเทคนิคและข้อพิจารณา
การอภิปรายในชุมชนได้เน้นถึงความท้าทายบางประการของแนวทาง sqlc โดยเฉพาะเรื่อง dynamic queries การกรองและการเรียงลำดับแบบไดนามิกยังคงเป็นปัญหาจากมุมมองของ database query planner เนื่องจาก prepared statements อาจทำงานแตกต่างกันขึ้นอยู่กับค่าพารามิเตอร์ PostgreSQL จัดการเรื่องนี้ได้ดีกว่า SQLite โดยการประเมินว่า prepared statements ต้องการการปรับแต่งเฉพาะพารามิเตอร์หรือไม่
SQL แทบจะไม่สามารถกำหนดพารามิเตอร์ได้ ดังนั้นในความคิดของฉัน DX จึงแย่กว่าการใช้ query builder มากและไม่ดีกว่าการใช้ strings ธรรมดามากนัก
ไลบรารียังมีข้อจำกัดทางเทคนิคบางประการ ประเภทข้อมูลที่ซับซ้อนจะถูกห่อเป็นประเภท dynamic เนื่องจากความซับซ้อนในการนำไปใช้ และฟีเจอร์ sqlc บางอย่างเช่น struct embedding และ batch operations ยังไม่ได้รับการสนับสนุน arrays หลายมิติใน PostgreSQL อาจไม่ถูกระบุอย่างถูกต้องเนื่องจากข้อจำกัดของ pg_dump
การติดตั้งและการใช้งาน:
## ติดตั้งไลบรารี
$ gleam add parrot
## สร้างโค้ดจาก DATABASE_URL
$ gleam run -m parrot
## ใช้ environment variable แบบกำหนดเอง
$ gleam run -m parrot -- --PG_DATABASE_URL
## ระบุไฟล์ SQLite
$ gleam run -m parrot -- --sqlite <file path>
ความสนใจในระบบนิเวศที่เติบโต
การเปิดตัวนี้ได้จุดประกายการอภิปรายที่กว้างขึ้นเกี่ยวกับรูปแบบการเข้าถึงฐานข้อมูลแบบ type-safe ในภาษาโปรแกรมต่างๆ นักพัฒนาได้กล่าวถึงเครื่องมือที่คล้ายกัน เช่น PgTyped สำหรับ TypeScript และ Jooq สำหรับ Java ซึ่งแสดงให้เห็นความสนใจของอุตสาหกรรมที่เพิ่มขึ้นในแนวทางการตรวจสอบ SQL แบบ compile-time
Parrot เป็นก้าวสำคัญไปข้างหน้าสำหรับระบบนิเวศ Gleam โดยให้นักพัฒนามีโซลูชันที่แข็งแกร่งสำหรับการเชื่อมต่อฐานข้อมูลในขณะที่ยังคงเน้นย้ำ type safety และความน่าเชื่อถือของภาษา ในขณะที่ชุมชน Gleam ยังคงเติบโต เครื่องมือเช่น Parrot ช่วยสร้าง Gleam ให้เป็นตัวเลือกที่เป็นไปได้สำหรับการสร้างระบบที่ปรับขนาดได้และ type-safe
อ้างอิง: Parrot / type-safe SQL in gleam
