PostgreSQL: kèo chấp bóng đá hôm nay liệu: | |||
---|---|---|---|
prev | UP | Chương 47. Tổng quan về PostgreSQL Internal | Tiếp theo |
TheGiai đoạn kèo bóng đá c1bao gồm hai phần:
Thekèo bóng đá c1được xác định tronggram.yvàScan.Lđược xây dựng bằng công cụ UNIXBisonvàFlex.
TheQuy trình chuyển đổiCác sửa đổi và tăng cường cho các cấu trúc dữ liệu được trả về bởi trình kèo bóng đá c1.
Trình kèo bóng đá c1 phải kiểm tra chuỗi truy vấn (đến dưới dạng văn bản đơn giản) cho cú pháp hợp lệ. Nếu cú pháp đúng aparse câyđược xây dựng và bàn giao; nếu không một lỗi được trả về. Trình kèo bóng đá c1 và Lexer được triển khai bằng Công cụ UNIX nổi tiếngBisonvàFlex.
TheLexerđược xác định trong tệpScan.lvà chịu trách nhiệm nhận dạngĐịnh danh, TheTừ khóa SQLvv. Đối với mọi từ khóa hoặc định danh được tìm thấy, Amã thông báođược tạo và trao cho trình kèo bóng đá c1.
Trình kèo bóng đá c1 được xác định trong tệpgram.yvà bao gồm một tập hợpQuy tắc ngữ kèo bóng đá c1vàActionđược thực thi bất cứ khi nào một quy tắc được sa thải. Mã của các hành động (thực sự là mã C) được sử dụng để xây dựng cây kèo bóng đá c1.
TệpScan.lđược chuyển đổi thành tệp nguồn CScan.cSử dụng chương trìnhFlexvàgram.yđược chuyển đổi thànhgram.cSử dụngBison. Sau khi các phép biến đổi này diễn ra, một trình biên dịch C bình thường có thể được sử dụng để tạo trình kèo bóng đá c1. Không bao giờ thực hiện bất kỳ thay đổi nào đối với các tệp C được tạo vì chúng sẽ được ghi đè vào lần tiếp theoFlexhoặc12756_12763được gọi.
Lưu ý:Các biến đổi và biên dịch được đề cập thường được thực hiện tự động bằng cách sử dụngMakefilesĐược vận chuyển vớiPostgreSQL13029_13052
Một mô tả chi tiết vềBisonhoặc các quy tắc ngữ kèo bóng đá c1 được đưa ra tronggram.y13206_13298FlexvàBison. Bạn nên quen thuộc vớiBisonTrước khi bạn bắt đầu nghiên cứu ngữ kèo bóng đá c1 được đưa ra tronggram.yNếu không bạn sẽ không hiểu điều gì xảy ra ở đó.
Giai đoạn kèo bóng đá c1 tạo một cây phân tích chỉ bằng cách sử dụng các quy tắc cố định về cấu trúc cú pháp của SQL. Nó không thực hiện bất kỳ tra cứu nào trong các danh mục hệ thống, do đó không có khả năng hiểu các ngữ nghĩa chi tiết của các hoạt động được yêu cầu. Sau khi trình kèo bóng đá c1 hoàn thành,Quy trình chuyển đổilấy cây được trình kèo bóng đá c1 làm đầu vào và giải thích ngữ nghĩa cần thiết để hiểu bảng, chức năng và toán tử nào được tham chiếu bởi truy vấn. Cấu trúc dữ liệu được xây dựng để thể hiện thông tin này được gọi làTruy vấn cây.
14323_14623Bắt đầu, rollback, v.v.), và sau đó chúng có thể được thực hiện chính xác mà không cần kèo bóng đá c1 thêm. Khi chúng ta biết rằng chúng ta đang xử lý một truy vấn thực tế (chẳng hạn nhưChọnhoặcCập nhật), bắt đầu giao dịch là không sao nếu chúng tôi chưa có. Chỉ sau đó, quá trình chuyển đổi mới có thể được gọi.
Cây truy vấn được tạo ra bởi quá trình chuyển đổi có cấu trúc tương tự như cây kèo bóng đá c1 thô ở hầu hết các nơi, nhưng nó có nhiều sự khác biệt về chi tiết. Ví dụ: AfunccallNode in the Parse Tree đại diện cho một cái gì đó trông giống như một cuộc gọi chức năng. Điều này có thể được chuyển đổi thành mộtfuncexprhoặcAggrefNode tùy thuộc vào việc tên được tham chiếu hóa ra là hàm thông thường hay hàm tổng hợp. Ngoài ra, thông tin về các loại dữ liệu thực tế của các cột và kết quả biểu thức được thêm vào cây truy vấn.