Veri türü desteği

Çoğu SQL veritabanından farklı olarak, Adobe AIR SQL veritabanı motoru, bu tablo sütunlarının belirli türde değerler içermesini gerektirmez veya bunu zorlamaz. Çalışma zamanı bunun yerine, veri türlerini denetlemek için saklama sınıfları ve sütun yakınlığı olmak üzere iki kavram kullanır. Bu bölümde, saklama sınıfları ve sütun yakınlığının yanı sıra, çeşitli koşullar altında veri türü farklılıklarının nasıl çözümlendiği açıklanır:

Saklama sınıfları

Saklama sınıfları, veritabanında değerleri saklamak için kullanılan gerçek veri türlerini gösterir. Şu saklama sınıfları veritabanı tarafından kullanılır:

NULL
Değer NULL değeridir.

INTEGER
Değer, imzalı bir tam sayıdır.

REAL
Değer, bir kayan nokta sayısı değeridir.

TEXT
Değer, bir metin dizesidir (256 MB ile sınırlıdır).

BLOB
Değer, bir BLOB'dur (İkili Büyük Nesne); başka bir deyişle, işlenmemiş ikili verilerdir (256 MB ile sınırlıdır).

Veritabanına değişmez değerler olarak gönderilen tüm değerler SQL ifadesine gömülür veya hazırlanmış bir SQL ifadesine parametreler kullanılarak bağlanan değerler SQL ifadesi çalıştırılmadan önce bir saklama sınıfına atanır.

SQL ifadesinin bir parçası olan değişmez değerler, tek veya çift tırnak işareti içine alınırsa, alınan TEXT saklama sınıfına; değişmez değer tırnak içinde olmayan ondalık basamağı veya üssü olmayan bir sayı olarak belirtilirse INTEGER saklama sınıfına; değişmez değer tırnak içinde olmayan ondalık basamağı veya üssü olan bir sayı olarak belirtilirse REAL saklama sınıfına ve değer NULL ise NULL saklama sınıfına atanır. BLOB saklama sınıfındaki değişmez değerler X'ABCD' gösterimi kullanılarak belirtilir. Daha fazla bilgi için İfadelerdeki değişmez değerler konusuna bakın.

SQLStatement.parameters ilişkilendirici dizisi kullanılarak parametre olarak girilen değerlere yerel veri türü bağıyla en yakından eşleşen saklama sınıfı atanır. Örneğin, int değerleri INTEGER saklama sınıfı olarak bağlanır; Number değerleri REAL saklama sınıfı olarak girilir; String değerlerine TEXT saklama sınıfı verilir ve ByteArray nesnelerine BLOB saklama sınıfı verilir.

Sütun yakınlığı

Bir sütunun sütun yakınlığı , o sütunda saklanan veri için önerilen türdür. Bir değer sütunda saklandığında (INSERT veya UPDATE ifadesiyle), çalışma zamanı bu değeri kendi veri türünden belirtilen yakınlığa dönüştürmeyi dener. Örneğin, bir Date değeri (ActionScript veya JavaScript Date örneği) yakınlığı TEXT olan bir sütuna eklenir, Date değeri String gösterimine dönüştürülür (veritabanında saklanmadan önce nesnenin toString() yöntemini çağırmaya eşdeğerdir). Değer belirtilen yakınlığa dönüştürülemezse, bir hata oluşur ve işlem gerçekleştirilmez. Bir değer SELECT ifadesi kullanılarak veritabanından alındığında, saklandığında farklı bir veri türüne dönüştürülüp dönüştürülmediğine bakılmaksızın yakınlığa karşılık gelen sınıfın bir örneği olarak döndürülür.

Bir sütun NULL değerleri kabul ederse, ActionScript veya JavaScript null değeri, NULL değerini sütunda saklamak için bir parametre değeri olarak kullanılabilir. NULL saklama sınıfı değeri bir SELECT ifadesinde alındığında, sütunun yakınlığına bakılmaksızın her zaman ActionScript veya JavaScript null değeri olarak döndürülür. Bir sütun NULL değerlerini kabul ederse, değerleri boş olamayan bir değere (Number veya Boolean gibi) dağıtmaya çalışmadan önce null olup olmadıklarını belirlemek üzere bu sütundan alınan değerleri her zaman denetleyin.

Veritabanındaki her sütuna aşağıdaki tür yakınlıklarından biri atanır:

  • TEXT (veya String)

  • NUMERIC

  • INTEGER (veya int)

  • REAL (veya Number)

  • Boolean

  • Date

  • XML

  • XMLLIST

  • Nesne

  • NONE

TEXT (veya String)

TEXT veya String yakınlığına sahip bir sütun, NULL, TEXT veya BLOB saklama sınıflarını kullanarak tüm verileri saklar. TEXT yakınlığına sahip bir sütuna sayısal veriler eklenirse, saklanmadan önce metin biçimine dönüştürülür.

NUMERIC

NUMERIC yakınlığına sahip bir sütun, NULL, REAL veya INTEGER saklama sınıflarını kullanarak değerleri içerir. NUMERIC bir sütuna metin verileri girildiğinde, saklanmadan önce bu değeri bir tam sayı veya gerçek sayıya dönüştürmek için girişimde bulunulur. Dönüştürme başarılı olursa, değer INTEGER veya REAL saklama sınıfı kullanılarak saklanır (örneğin, '10.05' değeri saklanmadan önce REAL saklama sınıfına dönüştürülür). Dönüştürme gerçekleştirilemezse, bir hata oluşur. NULL değerini dönüştürmek için hiçbir girişimde bulunulmaz. NUMERIC sütunundan alınan bir değer, değerin uyacağı en belirli sayısal türün bir örneği olarak döndürülür. Diğer bir deyişle, değer bir pozitif tam sayı veya 0 ise, bir uint örneği olarak döndürülür. Negatif bir tam sayı ise, int örneği olarak döndürülür. Son olarak, kayan nokta bileşenine (tam sayı değildir) sahipse, Number örneği olarak döndürülür.

INTEGER (veya int)

INTEGER yakınlığını kullanan bir sütun, bir istisna dışında NUMERIC yakınlığına sahip bir sütunla aynı şekilde hareket eder. Saklanacak değer, hiçbir kayan nokta bileşeni olmayan gerçek bir değerse (Number örneği gibi) veya değer, kayan nokta bileşeni olmayan gerçek bir değere dönüştürülebilecek bir metin değeriyse, bir tam sayıya dönüştürülür ve INTEGER saklama sınıfı kullanılarak saklanır. Kayar nokta bileşeni olan bir gerçek değeri saklamak için bir girişimde bulunulursa, bir hata oluşur.

REAL (veya Number)

REAL veya NUMBER yakınlığına sahip bir sütun, tam sayı değerlerini kayan nokta gösterimine zorlamasının dışında NUMERIC yakınlığa sahip bir sütun gibi hareket eder. REAL sütunundaki bir değer veritabanından her zaman Number örneği olarak döndürülür.

Boolean

BOOLEAN yakınlığına sahip bir sütun true veya false değerlerini saklar. BOOLEAN sütunu, bir ActionScript veya JavaScript Boolean örneği olan bir değeri kabul eder. Kod bir String değerini saklamaya çalışırsa, sıfırdan daha büyük uzunluğa sahip bir String true olarak kabul edilir ve boş bir String ise false olarak kabul edilir. Kod, sayısal verileri saklamaya çalışırsa, sıfır olmayan bir değer true olarak ve 0 değeri false olarak saklanır. Boolean değeri SELECT ifadesi kullanılarak alındığında, Boolean örneği olarak döndürülür. NULL olmayan değerler INTEGER saklama sınıfı (false için 0 ve true için 1) kullanılarak saklanır ve veriler alındığında Boolean nesnelerine dönüştürülür.

Date

DATE yakınlığına sahip bir sütun tarih ve saat değerlerini saklar. DATE sütunu, ActionScript veya JavaScript Date örnekleri olan değerleri kabul edecek şekilde tasarlanmıştır. Bir String değerini DATE sütununa saklamak için girişimde bulunulursa, çalışma zamanı bunu Julyen tarihine dönüştürmeye çalışır. Dönüştürme başarısız olursa bir hata oluşur. Kod, bir Number, int veya uint değerini saklamaya çalışırsa, verileri doğrulamak için hiçbir girişimde bulunulmaz ve geçerli bir Julyen tarih değeri olduğu varsayılır. SELECT ifadesi kullanılarak alınan bir DATE değeri otomatik olarak bir Date örneğine dönüştürülür. DATE değerleri REAL saklama sınıfı kullanılarak Julyen tarih değerleri olarak saklanır; dolayısıyla, sıralama ve karşılaştırma işlemleri beklediğiniz şekilde çalışır.

XML veya XMLList

XML veya XMLLIST yakınlığını kullanan bir sütun XML yapılarını saklar. Kod, SQLStatement parametresi kullanarak verileri bir XML sütununda saklamaya çalıştığında, çalışma zamanı, değeri ActionScript XML() veya XMLList() işlevini kullanarak dönüştürmeye ve doğrulamaya çalışır. Değer geçerli bir XML'e dönüştürülemezse, bir hata oluşur. Verileri saklama girişimi değişmez bir SQL metin değeri (örneğin, INSERT INTO (col1) VALUES ('Invalid XML (no closing tag)') kullanırsa, değer ayrıştırılmaz veya doğrulanmaz - düzgün biçimli olduğu varsayılır. Geçersiz bir değer saklanırsa, alındığında boş bir XML nesnesi olarak döndürülür. XML ve XMLLIST verileri TEXT saklama sınıfı veya NULL saklama sınıfı kullanılarak saklanır.

Nesne

Nesne yakınlığına sahip bir sütun, Object sınıfı örneklerinin yanı sıra Array örnekleri ve hatta özel sınıf örnekleri gibi Object alt sınıfları da dahil olmak üzere ActionScript veya JavaScript karmaşık nesnelerini saklar. OBJECT sütunu verileri AMF3 biçiminde serileştirilir ve BLOB saklama sınıfı kullanılarak saklanır. Bir değer alındığında, AMF3'ten serileştirilmesi kaldırılır ve saklandığı sınıf gibi bir örnek olarak döndürülür. Bazı ActionScript sınıflarının, özellikle de ekran nesnelerinin serileştirilmesinin, özgün veri türlerinin örnekleri olarak kaldırılamayacağını göz önünde bulundurun. Özel sınıf örneğini saklamadan önce, flash.net.registerClassAlias() yöntemini (veya Flex'te sınıf bildirimine [RemoteObject] meta verileri ekleyerek) kullanarak sınıf için bir takma ad kaydetmeniz gerekir. Ayrıca, bu verileri almadan önce, sınıf için aynı takma adı kaydetmeniz gerekir. Yapısı gereği veya eksik veya hatalı eşleşen sınıf takma adı nedeniyle serileştirilmesi kaldırılamayan bir sınıf gibi, serileştirilmesi düzgün şekilde kaldırılamayacak veriler, orijinal örneğe karşılık gelen özellikler ve değerlerle birlikte adsız bir nesne (Object sınıfı örneği) olarak döndürülür.

NONE

NONE yakınlığına sahip bir sütun, bir saklama sınıfını bir diğerine tercih etmez. Eklemeden önce verileri dönüştürmek için hiçbir girişimde bulunmaz.

Yakınlığı belirleme

Bir sütunun tür yakınlığı, sütunun CREATE TABLE ifadesinde belirtilen türüne göre belirlenir. Türü belirlerken aşağıdaki kurallar (büyük/küçük harf duyarlı değil) geçerlidir:

  • Sütunun veri türü "CHAR", "CLOB", "STRI" veya "TEXT" dizelerinden birini içerirse, bu sütun TEXT/String yakınlığına sahiptir. VARCHAR türünde "CHAR" dizesinin olduğuna ve dolayısıyla TEXT yakınlığının atandığına dikkat edin.

  • Sütunun veri türü "BLOB" dizesini içerirse veya hiçbir veri türü belirtilmezse, sütun NONE yakınlığına sahiptir.

  • Sütun için veri türü "XMLL" dizesini içerirse, sütun XMLLIST yakınlığına sahiptir.

  • Veri türü "XML" dizesini içerirse, sütun XML yakınlığına sahiptir.

  • Veri türü "OBJE" dizesini içerirse, sütun Object yakınlığına sahiptir.

  • Veri türü "BOOL" dizesini içerirse, sütun Boolean yakınlığına sahiptir.

  • Veri türü "DATE" dizesini içerirse, sütun Date yakınlığına sahiptir.

  • Veri türü "INT" dizesini içerirse ("UINT" dahil), INTEGER/int yakınlığına atanır.

  • Sütunun veri türü "REAL", "NUMB", "FLOA" veya "DOUB" dizelerinden birini içerirse, sütun REAL/Number yakınlığına sahiptir.

  • Tersi durumda, yakınlık NUMERIC olur.

  • Bir tablo CREATE TABLE t AS SELECT... ifadesi kullanılarak oluşturulursa, tüm sütunlarda hiçbir veri türü belirtilmez ve NONE yakınlığı atanır.

Veri türleri ve karşılaştırma operatörleri

Aşağıdaki ikili karşılaştırma operatörleri =, <, <=, >= ve !=, belirtilen üyeliği test etmek için IN işlemi ve üç bölümden oluşan BETWEEN karşılaştırma operatörüyle birlikte desteklenir. Bu operatörler hakkında bilgi için bkz. Operatörler.

Karşılaştırmanın sonucu, karşılaştırılan iki değerin saklama sınıflarına bağlıdır. İki değeri karşılaştırırken aşağıdaki kurallar geçerlidir:

  • NULL saklama sınıfına sahip bir değer, başka bir değerden küçük kabul edilir (NULL saklama sınıfındaki başka bir değer de dahil olmak üzere).

  • INTEGER veya REAL değeri TEXT veya BLOB değerinden küçüktür. INTEGER veya REAL değeri başka bir INTEGER veya REAL değeriyle karşılaştırıldığında, sayısal bir karşılaştırma gerçekleştirilir.

  • TEXT değeri bir BLOB değerinden küçüktür. İki TEXT değeri karşılaştırıldığında, ikili bir karşılaştırma gerçekleştirilir.

  • İki BLOB değeri karşılaştırıldığında, sonuç her zaman ikili karşılaştırma kullanılarak belirlenir.

Üç bölümden oluşan BETWEEN operatörü her zaman, eşdeğer ikili ifade olarak yeniden dağıtılır. Örneğin, a BETWEEN b AND c ifadesi, ifadeyi değerlendirmek için gerekli her karşılaştırmadaki a için farklı yakınlıkların uygulanması anlamına gelse de, a >= b AND a <= c olarak yeniden dağıtılır.

a IN (SELECT b ....) türündeki ifadeler, ikili karşılaştırmalar için daha önce belirtilen üç kural tarafından işlenir; diğer bir deyişle, a = b ifadesiyle aynı şekilde. Örneğin, b bir sütun değeriyse ve a bir ifadeyse, b yakınlığı, bir karşılaştırma yapılmadan önce a öğesine uygulanır. a IN (x, y, z) ifadesi, a = +x OR a = +y OR a = +z olarak yeniden dağıtılır. IN operatörünün sağındaki değerler (bu örnekte, x, y ve z değerleri), sütun değerleri olsalar bile ifade olarak kabul edilir. IN operatörünün solundaki değer bir sütunsa, bu sütunun yakınlığı kullanılır. Değer bir ifadeyse, hiçbir dönüştürme gerçekleştirilmez.

Karşılaştırmaların nasıl gerçekleştirildiği bir COLLATE deyiminin kullanılmasına da bağlıdır. Daha fazla bilgi için COLLATE ifadesine bakın.

Veri türleri ve matematik operatörler

Desteklenen her matematik operatörü; *, /, %, + ve -; için ifade değerlendirilmeden önce her işlenene sayısal yakınlık uygulanır. Bir işlenen NUMERIC saklama sınıfına başarıyla dönüştürülemezse, ifade NULL olarak değerlendirilir.

|| bitiştirme operatörü kullanıldığında, her işlenen, ifade değerlendirilmeden önce TEXT saklama sınıfına dönüştürülür. Bir işlenen TEXT saklama sınıfına dönüştürülemezse, ifadenin değeri NULL olur. Değerin dönüştürülememesi durumu iki koşulda görülür; işlenenin değeri NULL ise veya TEXT dışı bir saklama sınıfı içeren bir BLOB ise.

Veri türleri ve sıralama

Değerler ORDER BY deyimi ile sıralandığında, NULL saklama sınıfındaki değerler ilk sırada yer alır. Bunları, sayısal düzende araya dağıtılan INTEGER ve REAL değerleri izler; bunları da ikili düzendeki veya belirtilen harmanlamaya dayalı (BINARY veya NOCASE) TEXT değerleri izler. Son olarak ikili düzende BLOB değerleri gelir. Sıralamadan önce hiçbir saklama sınıfı dönüştürmesi gerçekleştirilmez.

Veri türleri ve gruplama

Değerleri GROUP BY deyimiyle grupladığınızda, farklı saklama sınıflarına sahip değerler belirgin olarak düşünülür. Bir istisna, sayısal olarak eşdeğerse eşit olarak kabul edilen INTEGER ve REAL değerleridir. GROUP BY deyimi sonucu değerlere hiçbir yakınlık uygulanmaz.

Veri türleri ve bileşik SELECT ifadeleri

Bileşik SELECT operatörleri olan UNION, INTERSECT ve EXCEPT, değerler arasında üstü kapalı karşılaştırmalar yapar. Bu karşılaştırmalar yapılmadan önce, her değere bir yakınlık uygulanabilir. Varsa aynı yakınlık, bileşik SELECT sonuç kümesinin tek bir sütununda döndürülebilecek tüm değerlere uygulanır. Uygulanan yakınlık, bu konumda sütun değerine sahip (başka bir ifade türünde olmayan) ilk bileşen SELECT ifadesi tarafından döndürülen sütunun yakınlığıdır. Belirtilen bir bileşik SELECT sütunu için bileşen SELECT ifadelerinin hiçbiri bir sütun değeri döndürmezse, karşılaştırma gerçekleştirmeden önce bu sütundan değerlere hiçbir yakınlık uygulanmaz.