SQL komutu içeren bir dize tokenizing / Ayrıştırma

1 Cevap php

Herhangi bir açık kaynak kütüphaneleri tokenize olacak / çeşitli bileşenleri içine bir ANSI SQL dizesini ayrıştırmak (python / PHP tercih herhangi bir dil,) var mı?

Ben şu dizeyi olsaydı yani,

 SELECT a.foo, b.baz, a.bar
 FROM TABLE_A a
 LEFT JOIN TABLE_B b
 ON a.id = b.id
 WHERE baz = 'snafu';

Ben gibi bir veri yapısı / object şey geri almak istiyorum

 //fake PHPish 
 $results['select-columns']  = Array[a.foo,b.baz,a.bar];
 $results['tables']    = Array[TABLE_A,TABLE_B];
 $results['table-aliases'] = Array[a=>TABLE_A, b=>TABLE_B];
 //etc...

Yeniden düzenlenmiş, ben motor onunla ne yapacağını bilir ki ayrı bir SQL komutu takılıyor bir veritabanı paketi kod arıyorum. Internet arama SQL İLE bir dizeyi ayrıştırmak için nasıl bir çok sonuç çıkıyor. Ben istediğim bu değil.

(Ben ne istediğinizi bulmak için bir açık kaynak veritabanının kodu ile Glop olabilir gerçekleştirmek, ama ben biraz daha hazır bir şey için umuyordum rağmen where MySQL, PostgreSQL, SQLite kaynağı için biliyorum bak,) bunu iletmekten çekinmeyin

Teşekkürler!

1 Cevap

SQLite kaynak SQL için dilbilgisi içerir parse.y adında bir dosya var. Sen dilbilgisi yürütür C kodu üretmek için lemon parser generator bu dosyayı iletebilirsiniz.