jOOQ (Java Object Oriented Sorgulama) Open Source Edition açık kaynak kodlu ve jOOQ komut satırı yazılımı Java kodu üretmek için bir araç olarak hareket etmek yerden Java uygulanan ve tasarlanan özgürce dağıtılan versiyonu Çeşitli veritabanları.
uygulama tipi güvenli SQL sorguları oluşturmanıza olanak verir bir akıcı API (Uygulama Programlama Arayüzü) içerir. Ayrıca iki ticari sürümleri, Professional ve Enterprise olarak dağıtılmaktadır.
Bir bakışta özellikler
jOOQ Open Source Edition Anahtar özellikler Java kod üretimi, aktif kayıtlar için destek, tip güvenli SQL sorgu desteği, SQL standart desteği oluşturmak için destek yanı sıra, satıcıya özgü bir özellik desteği bulunmaktadır.
Ayrıca, yazılım SQL dönüşümler için saklanan prosedürleri, destek veya paylaşılan şema veya çoklu şema çoklu kiracılık, SQL nesil yaşam döngüsü için kancalar ve destek için destek sunuyor.
Açık kaynak veritabanları geniş bir yelpazede destekler
Beklendiği gibi, jOOQ of Open Source Edition, hem de biz CUBRID Apache Derby, Firebird, HSQLDB (HyperSQL DataBase), MySQL Community Edition, PostgreSQL, H2 sayabiliriz aralarında açık kaynak veritabanları geniş bir yelpazede destekler SQLite olarak.
jOOQ ticari sürümleri ile gelen dahili yanı sıra, Microsoft SQL Server, Oracle XE, Oracle Standard Edition, Oracle Enterprise Edition, Informix dahil olmak üzere tüm ticari veritabanları, tüm yukarıda belirtilen açık kaynak veritabanları için destek, IBM DB2, MySQL Enterprise Edition, Sybase Adaptive Server Enterprise ve Sybase SQL Anywhere.
Kaput ve desteklenen işletim sistemleri altında
jOOQ kaputunun altında bir göz attığınızda, biz hemen uygulama bu Java Runtime Environment (JRE) mevcut olduğu herhangi bir bilgisayar işletim sisteminde desteklenen demektir Java programlama dilinde, tamamen yazılmış olduğunu fark edebilirsiniz .
Şu anda, başarıyla hem 32-bit ve 64-bit bilgisayar mimarilerini destekleyen Linux dağıtımları sayısız yanı sıra Microsoft Windows ve Mac OS X işletim sistemleri ile test edilmiştir.
Bu sürümde> /
Ekli & quot; -
sürümünde 3.5.1 yeni Nedir:
- Hata düzeltmeleri:
- # 3378 Hata tamamen SEÇ maddelerde PostgreSQL tablo değerli işlevler eleme sırasında
- # 3803 oluşturmaz CREATE TABLE ifadesi NOT NULL kısıtı
- cursor.execute (RecordMapper) ve diğer yöntemler içerisinde 3811 Potansiyel NullPointerException
- set operasyonları ile kullanılan # 3817, ORDER BY herhangi nitelikli alanları içermemelidir
- # 3819 yeni jooq-meta-x.x.xsd tanımlamak için Constants.XSD_META ve Constants.NS_META Ekle
- değerler (ROW1 ...) ile oluşturulan Postgres için # 3822 Geçersiz SQL
- # 3824 PostgreSQL dateadd () yanlışlıkla döndüren bir TIMESTAMP değeri
- # 3831 amortisman uyarı bayrağı etkin olmasa bile görüntülenir
- # 3833 org.jooq.CreateTableAsStep.column (Alanı alan, VeriTürü tipi) SQLite
- SQLite'nın CREATE VIEW deyimi sütunları yeniden adlandırmak için izin vermez # 3835
- SQLite tarafından desteklenmiyor ALTER TABLE tablo üzerinde # 3838 BadSupport açıklamaları
- # 3855 Oracle GERÇEK ve YÜZDÜRME türleri kod üreteci BigInteger üretmek için neden yerine çift türleri
- sınırlayıcı ile # 3863 CSV İhracat sadece düzgün çalışmıyor
- özel JavaGenerator.newJavaWriter () yöntemine erişilemiyor # 3880
- # 3888 Veri türü dönüştürme başarısız [] kullanıcı girişi olarak
- # ücretsiz deneme sürümü artık Jan 01, 2015 yılından sonra çalışan 3895
Bir Bağlama kullanarak ve bir bayt geçerken
nedir sürümü 3.5.0 Yeni
- Yeni Bağlama SPI:
- olduğunu. Bu kullanıcı tiplerine standart JDBC türlerini eşleştirmek için kullanılan mevcut org.jooq.Converter SPI daha ileri gider. Yeni Cilt SPI ile hemen hemen * TÜM * satıcıya özgü türleri artık destekleniyor olabilir. Örnekler PostgreSQL'in JSON veya HSTORE türlerini veya Oracle'ın TARİH türünü içerir -. Gerçekten yanlış java.sql.Timestamp aracılığıyla temsil edilir, biz mevcut özellik artık, bu tür bağları kullanmaya sonradan neden olduğu
- Saklı yordamlar her yerde vardır:
- Saklı yordam desteği genellikle bu sürümde düzeldi. Bu PL / SQL veya Transact-SQL ile kullanılmak üzere yeni küçük birçok özellik ve kolaylıklar içermektedir. Örneğin, jOOQ 3.5.0 şimdi Oracle Spatial doğrudan bağlanma sağlar PL / SQL OBJECT ve TABLO tipleri, çapraz şema başvuruları destekler. Biz burada bu heyecan verici gelişme hakkında blogged ettik: http://blog.jooq.org/2014/11/04/painless-access-from-java-to-plsql-procedures-with-jooq/
- biz ona vardı, biz de NESNE tipi desteği ile çok güzel bütünleşir Oracle AQ, temel desteği ekledik Ve!
- , şimdi saklı yordamlar Sonuçların keyfi sayıda getiriliyor desteklemek, ve biz de tablo değerli işlevler için Firebird'ün çok ilginç sözdizimi dahil, Firebird PSQL desteği uyguladık.
- biz Oracle, PostgreSQL ve HSQLDB dahil veritabanlarının çeşitli için kullanıcı tanımlı toplama işlevleri destekler. Kesinlikle bir şey içine bakmak gerekir!
- SQL iyileştirmeler;
- Bu sürümde, nihayet BİRLİĞİ, INTERSECT desteği var ve sağ saygı ile DIŞINDA tür işlemleri yuvalama yanı sıra ORDER BY ile birleştirerek ve LIMIT .. OFFSET için.
- Biraz daha DDL konuşalım:
- Biz de dahil olmak DDL deyimleri, desteği eklemek için devam ettik
- CREATE TABLE
- SELECT, CREATE TABLE AS
- VIEW ve drop CREATE VIEW
- CREATE INDEX ve DROP INDEX
- CREATE SIRASI ve DAMLA SIRASI
- DAMLA .. IF EXISTS
- Gelecekte de daha fazla DDL deyimleri için destek eklemeye devam edeceğiz.
- Kod nesil iyileştirmeler:
- Yeni XMLDatabase, XML biçimleri, örneğin meta bilgileri okumak için izin veren bir kod üretme yapılandırması için destek ekledik Standart INFORMATION_SCHEMA.xml gelen veya Vertabelo XML ihracat formatından: http://blog.jooq.org/2014/09/05/importing-your-erd-export-into-jooq/
- Gelecek sürümleri yerleşik içerecektir destek XML çeşitli biçimlerde için.
- Biz onların Gradle inşa ile kullanıcıların jOOQ kod oluşturma entegre yardımcı olmak Gradleware dan Etienne Studer müthiş bir katkısı oldu.
- Son fakat en az değil: Informix:
- Oh, ve bu arada, şimdi de IBM'in ikinci en popüler veritabanı desteği: Informix. Bu veritabanı desteği jOOQ Enterprise Edition dahil edilecektir.
- Özellikleri ve iyileştirmeler:
- Informix veritabanı için # 561 Ekleme desteği
- # 994 Postgres & quot desteği ekleyin; hstore & quot; Veri türü
- # 1341 DriverManager.getConnection taklit eden DSL.using (String url) ve diğer yöntemlerle ekleyin ()
- # 1380 equals (), POJOs üzerinde hashCode () oluşturun
- # 1392 insert ifadeleri işlemek için formatInsert () ekleyin Sonucu gelen
- # 1410 Postgres & quot desteği ekleyin; fıkra
- SQL standart BİRLİĞİ sözdizimi için # 1658 Add desteği. BİRLİĞİ jOOQ mevcut anlayış sadece kolaylık
- birbirine arasındaki # 1761 Başvuru kılavuzu versiyonları
- Satır no 2054 Uygulamak sayısal karşılaştırma yüklemler [N] satır değeri ifadeler
- rutinleri ve UDTs için # 2155 Add Converter destek
- # 2209 Add Sonucu Result.into (Alan, Alan, .., Alan) Sonuçları dönüştürmek amacıyla / başka bir tür içine Kayıtlar
- # 2289 jOOQ-göç yolu-örnek ekleme, bir dokümantasyon modülü Flyway ile entegre göstermek için
- elde edilebilir nasıl asenkron sorgulama açıklayan kılavuzuna # 2604 Bölüm ekle
- MockConnection / MockDataProvider / MockExecuteContext saklanan prosedürleri için # 2674 Add desteği
- # 2788 PostgreSQL & quot desteği ekleyin; json & quot; Veri türü
- # 2886 jooq-codegen-maven jdbc sürücü proje bağımlılıkları içine bakmalı
- # 2907 Taklit GÜNCELLEME .. DB2 SON TABLO (UPDATE ...) DAN SEÇ aracılığıyla RETURNING
- # 2925 Firebird saklı yordamlar için destek ekleyin
- # şema aynı olduğu bilinmektedir 3121 Atla kodu yeniden oluşturma
- # 3151 Add & quot; soru işareti & quot; kılavuzuna araç ipucu ile atlama için izin vermek için & quot; bu kılavuzu & quot okumayı; bölüm
- # 3248 Bağlama desteği ekleyin (yani & quot; Türü Sağlayıcıları & quot;)
- CREATE TABLE deyimi için # 3337 Ekleme desteği
- # 3339 desteği ekleyin
- # 3340 desteği ekleyin
- # 3346 kodu jeneratörü JDBC sürücüsü özelliği atlama için izin ver
- # 3355 desteği ekleyin
- # 3370 oluşturulan nesneler için sınıf javadocs geçersiz kılma için izin ver
- # 3375 PostgreSQL tablo değerli işlevler için destek ekleyin
- # 3381 desteği ekleyin
- # 3386 işlevsel-ilişkisel dönüşüm için Java 8 Akımlar kullanarak bazı test durumlarda ekleyin
- # 3388 (0 SEÇ) ORDER BY tarafından ÜZERİNDEN SQL Server'ın ROW_NUMBER () (@@sürümü ORDER BY) değiştirin
- # 3389 kolaylık DSLContext.currval (String) ve nextval (String) ekleyin
- # 3412 Add Liste DSLContext.fetchValues (...) Varolan fetchValue (...) yöntemleri benzer
- # 3418 ekle kolaylık DSL.defaultValue (Field)
- Oracle AQ için # 3425 Ekleme desteği
- MySQL endeksi ipuçları için # 3431 Ekleme desteği
- # 3435 INTO .. SQL Server'ın SELECT için destek ekle [yeni tablo] sözdizimi
- # 3442 MockResultSet.getArray () yöntemleri uygulamak
- # 3443 Dönüştür JDBC Dizi türüne değerler / diziler dönüştürme desteği ekleyin
- # 3444 MockArray, JDBC en Dizi Çeşidi sahte uygulanmasını ekleyin
- # 3451 bir XML dosyası bir veritabanı şemasını oluşturmak için XMLDatabase ekle
- # 3477 başka alanın adının bir alanı yeniden adlandırmak için Field.as (Alan) ekleyin
- # 3480 kolaylık XXXContext.dialect () ve XXXContext.family () ekleyin
- # 3483 Let 's maç hem tam sütun isimleri yanı sıra vasıfsız sütun adları
- # 3495 Gradle jOOQ kod jeneratör kullanmak nasıl gösteren bir örnek proje ekleyin
- # 3496 Log Query.isExecutable döndüren bir sorgu yürütüldüğünde bir DEBUG mesajı () == false
- # 3501 ResultQuery.fetchSet () ve Result.intoSet () yöntemleri LinkedHashSets dönmek ekle
- entegrasyon testleri sırasında jOOQ APISupport açıklamaları doğru uygulanmasını doğrulamak için Enstrüman # 3506
- # 3511 INTERSECT aracılığıyla DISTINCT yüklemi öykünme geliştirin
- # 3512 PostgreSQL özgü COUNT () uzantısını destekleyen DSL.count (Tablo) ve DSL.countDistinct (Tablo) ekleyin
- formatCSV / formatXML arasında 3513 izle sürümü
- # 3519 Belge PostgreSQL JDBC adlı sınırlamalar = true
- # 3525 mekanizmasını içerme / dışlama jOOQ-meta en daha ayrıntılı DEBUG günlüğü gerçekleştir
- # 3532 damla desteği ekleyin ... IF DDL hükümler MEVCUT
- DSLContext dan DSL # 3551 Kopya düz SQL sorgusu inşaat API
- PostgreSQL kullanıcı tanımlı toplama işlevleri için # 3557 Ekleme desteği
- uyarıları / devre dışı getiriliyor etkinleştirmek Ayarı # 3558 Ekle
- # 3559 Propagate en jOOQ-codegen ilişkileri bayrak, ilişkileri getirmek için (muhtemelen pahalı) sorguları önlemek için
- # 3565 kolaylık XXXContext.settings () ekleyin
- # 3566 XML dize kodu oluşturmak için GenerationTool.generate (String) ekleyin
- # 3569 etiketi artık kod üreteci yapılandırmasında zorunludur
- # 3579 Taklit doğal onlara destek olmadığını veritabanlarında operatörleri set iç içe
- saklanan işlev için Oracle skaler alt sorgu önbelleğe almayı etkinleştirmek için ayarlama # 3592 Ekleme çağrıları
- # 3595 MockResult (Tutanak verileri) kolaylık kurucu ekleyin
- başına şema bazında # 3596 Let kodu üreteci boş oluşturulan paketler
- # 3597 PostgreSQL için de tablo ve sütun yorumlarınızı oluşturun
- tablolar kendi yorumlarınızı tanımlarsanız, üretmek & quot yok # 3598; Bu sınıf jOOQ tarafından oluşturulan. & quot; Javadocs içinde
- # 3599Generated açıklama daha güzel biçimlendirme uygulamak
- SQL standardı # 3600 Ekleme destek CHECK OPTION İLE .. SEÇİN
- # 3610 sürüm denetimi altında tutma oluşturulan kaynaklar arasındaki farkları açıklar ya da
- # 3611 havuzuna bir jOOQ / Nashorn örnek Ekle
- # 3612 kod jeneratörü bir ERD ihracat biçimi almak için nasıl gösteren bir örnek proje ekleyin
- # 3622 Field.in (Sonuç) ve desteği ekleyin Satır [N] .in (Sonuç)
- # 3623 adlandırılmış parametreleri işlemek için ParamType.NAMED_OR_INLINED ekle
- # 3626 Harita Result.intoGroups (Tablo) ekleyin
- # 3627 CASE basitleştirilmiş API ekleyin ifadeler
- # 3628 ekle Alan DSL.field (Seç)
- kod üretimi yapılandırmasında isteğe bağlı # 3752 Bütünleme elemanı
- # 3754 Convert.convert () ilkel tip dönüştürme açıklar Javadoc
- bir fark var sadece # 3756 Rejenere dosyaları
- # 3760 ekle Record.intoList ()
- # 3769 org.jooq.Converters ekleme, bir zincirleme Dönüştürücü uygulaması
- # 3773 Yapılandırma Javadoc Yapılandırma iplik güvenliği jOOQ anlayışını açıklar
- # 3775 Let QueryPart.toString () oluşturmak biçimlendirilmiş SQL
- # 3782 SQLDialect bir org.jooq.util.Database oluşturmak için bir yöntem ekleyin
- API değişiklikleri (geriye doğru uyumlu):
- # 3345 deprecate org.jooq.api.annotation.State ve Geçiş açıklamaları
- # 3356 deprecate Select.fetchCount ()
- # 3703 deprecate CastMode.SOME ve RenderContext.cast ()
- # 3770 deprecate
- API değişiklikleri (geriye doğru uyumlu)
- Davranış değişiklikleri (geriye doğru uyumlu):
- # 2486 tip-yeniden yazar için duyarlık, ölçek, uzunluk belirtmek için izin ver
- kaçan MySQL ters eğik çizgi etkinleştirmek için ayarlama # 3000 Ekle
- alıntı isimler oluşturması gerektiğini Dize adlarını kabul # 3407 DDL deyimleri, değil düz SQL
- # 3541 Değişim DSLContext.nextval (String) ve currval (String) dahili yerine DSL.sequence ait) DSL.sequenceByName (çağırmak için ()
- Hata düzeltmeleri:
- hale SQL içerisinde 2080 sözdizimi hatası sınırı () kullanarak. SQL Server yumuşatılmış projeksiyonlar) (ofset
- # 3206 DSL.field (Durum) doğru boş değerlere işlemez
- # 3347 Field.in (T ...) Koleksiyon argümanlar karşı savunmak gerekir
- # 3353 Manuel Javadoc çapa artık JDK 8 Javadocs son değişikliklerle doğru
- kopya sonra # 3359 mağaza () (), bir INSERT yerine bir UPDATE yürütür
- # 3360 SQLite regresyon tanımlayıcıları özel karakterler kullanarak
- # 3362 DSLContext.batchStore () kayıtlar yeni kayıtlarda üst üste iki kez yürütülür toplu mağazaları ise Settings.updatablePrimaryKeys true olarak ayarlanırsa, INSERT yürütür
- # 3363 UpdatableRecord.store ()) yerine INSERT UPDATE sonra (silme yürütür
- # 3369 Oracle TARİH sütunlarla ilişkili java.sql.Timestamp bağlama değerleri (TARİH AS?) CAST Render
- # 3372 syntheticPrimaryKeys kod üretimi seçeneği şu anda belgelenmemiş
- # 3373 tüm desteklenen veritabanlarını listelemek değil ÇİFT tablo hakkında kılavuzun sayfa
- # 3382 NOT NULL kısıtları ve yazdığınız bilgiler yanlış oluşturulur
- Yeni jOOQ 3.4 işlem API'si hakkında eksik belgeler # 3390 Ekle
- gerçekten gerekli sadece # 3392 Çağrı setAccessible (true)
- # 3400 ALTER TABLE Firebird geçersiz sözdizimi oluşturur
- Firebird için jOOQ tarafından oluşturulan # 3402 Yanlış karakter uzunluğu
- # 3408 tekrar eklentisi maven varsayılan log4j.xml yapılandırma dosyasını kaldırın
- # 3413 Oracle kalktı bayrak kapalı olarak ayarlanırsa ArrayRecords yansıma yoluyla inşa edilemez oluşturulan
- # 3420 NullPointerException Oracle AQ masalar kod oluştururken
- # 3427 Dahili QueryCollectorSignal istisna kullanıcı koduna kaçar
- # 3430 JDBC kaçış sözdizimi doğru düz bir SQL satırsonu içerdiğinde düz SQL hale değil
- # 3436 Manuel bölümler yerine Yapılandırma bir DSLContext olmak CTX
- # 3437 QualifiedField RenderContext.qualify () uymayan
- # 3445 profesyonel sürümü ile Maven kod jeneratör çalıştırmak Can not
- # 3450 Geri bölü kaçmış alamadım
- # 3455 GÜNCELLEME .. türetilen tablolar için yanlış SQL veya takma tablolar oluşturur
- Rutin argüman adlandırılan olduğu oluşturulan kodu içerisinde 3456 İsim çatışma f & quot; (işlevler) veya & quot; p & quot; (prosedürleri)
- # 3462 Field.in (Object ...) yanlışlıkla Seç argümanlarla çağrılabilir
- # 3463 Field.in yöntemleri trueCondition () veya falseCondition () dönmemesi (...)
- # 3473 java.lang.IllegalArgumentException: Field (null) Row bulunmayan
- üretilen kodun içerisinde 3488 Derleme hatası, benzer bir tablo T_A ve TA var olduğunda
- # 3489 DefaultTransactionProvider Connection.releaseSavepoint (kayıt noktası) çağırmaz sonra taahhüt
- Select.intersect () ve Select.except () üzerine # 3507 BadSupport açıklama
- # 3514 ResultQuery.fetchLazy () görmezden fetchSize ()
- # 3520 çoğaltın sütun bilgileri
- kod üretimi tanıtıldı # 3526 Gereksiz uyarı günlükleri
- gerçekten gerekli değilse, Oracle için adlandırılmış parametreleri kullanarak # 3533 kaçının
- releaseSavepoint () için # 3537 Yanlış çağrı
- # 3542 Oracle DDL deyimleri bind değişkenleri kullanarak izin vermez
- # 3544 tüm DDL Sorgu türlü uzatmak gereken bir DDLQuery işaretleyici arayüzü, ekleme
- # 3545 Hata nitelikli kullanarak, H2 harf duyarlı dizi adları
- bind değişkenleri kabul etmez # 3547 DSLContext.batch (String)
- imzalar tip eş anlamlı kullanarak # 3552 Oracle Saklı yordamlar jOOQ aracılığıyla kullanılamaz
- # 3556 Oluşturulan Oracle Saklanan diğer şemalar gelen türlerini başvuru değil prosedürler
- # 3560 çok büyük MySQL veritabanı birincil anahtarların Yavaş keşif
- # 3567 Kod jeneratör hata mesajı yanlış XSD ifade eder
- # 3577 işlemek & etmeyin quot; boş & quot; OFFSET 0 maddeleri
- # 3578 inexistent ExecuteContext.dialect atıfta hafif manuel hata () yöntemi
- # 3582 Record.from (Object) yerleştirirken kısıtlama ihlalleri yol açabilir DataType.nullable () dikkate almaz
- # 3586 Context.paramType () yerine Endeksli başlangıçta null
- # 3590 Manuel yanlışlıkla SQL standardı GELEN olmadan SEÇ izin verdiğini iddia
- 3591 Derleme hatası kılavuzun öğretici kodunda meydana #
- görünümüne INSERT Can not # 3602
- işlem yöntemi belgelerinde # 3608 Tipo
- # 3624 Derleme hataları Dönüştürücüler oluşturulan rutinleri ve UDTs uygulandığında
- # 3630 ArrayOutOfBoundsException jOOQ sade SQL MySQL kaçan ters eğik çizgi kullanarak
- # 3634 Record.into (Tablo) yanlış tabloya eşleştiren
- # 3639 java.lang.NoSuchMethodException: Bahar TransactionAwareDataSourceProxy Oracle dizileri kullanarak createARRAY
- bilinen bir MySQL hata aşmak için MySQL Tarih / Saat değişmezleri arasında 3648 Kullanım JDBC Escape sözdizimi
- # 3650 TableRecord.insert on NullPointerException () birincil anahtar bilgiler mevcut olmadığı zaman
- # 3664 UNION ALL, ORDER BY ve LIMIT regresyon
- # 3665 Yazım hataları
- # 3673 OracleDSL.toChar () dize türleri gerektirmemelidir yöntemleri
- # 3682 PostgreSQL INSERT .. sade SQL tablosu ile çalışmıyor İADE
- Hata düzeltmeleri:
- Hata düzeltmeleri:
- Hata düzeltmeleri:
Bu heyecan verici sürümü ana gelişme tamamen kullanıcı tipinin JDBC etkileşimin tüm yönlerini kontrol etmek için kullanılabilir yeni org.jooq.Binding SPI
Transact-SQL ve MySQL
Bu arada
jOOQ ve
DISTINCT ON & quot;
INDEX ve drop INDEX deyimleri CREATE
CREATE VIEW ve GÖRÜNÜM ifadeleri DAMLA için
SIRASI ve drop SIRASI ifadeleri CREATE
ifadeleri AS CREATE TABLE
Connection.autoCommit kullanarak büyük imleçler ile ilgili
jOOQ-meta da
Bir isim verilir sadece
[koşul] THEN [seçin] ZAMAN
CASE ifadesi ile boolean alanlar taklit
Settings.updatablePrimaryKeys ayarlandığında
Settings.updatablePrimaryKeys true olarak ayarlanırsa
veri türleri için Firebird Domains kullanırken
veri türleri null olduğunda
ExecuteListener ele değilken
işlemler belgeler hakkında
SQL yorumlarda
FROM deyimi
farklı tablolarda aynı adı paylaşan yabancı anahtarlar için yabancı anahtar referanslarda
Bir öz-join sonra yumuşatılmış bir tablo geçerken
Javadocs
Gereksinimleri
- Java 2 Standard Edition Runtime Environment
Yorum Bulunamadı