Home | History | Annotate | Download | only in database
      1 /*
      2  * Copyright (C) 2018 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *       http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 @file:Suppress("NOTHING_TO_INLINE") // Aliases to other public API.
     18 
     19 package androidx.core.database
     20 
     21 import android.database.Cursor
     22 
     23 /**
     24  * Returns the value of the requested column as a byte array.
     25  *
     26  * The result and whether this method throws an exception when the column value is null or the
     27  * column type is not a blob type is implementation-defined.
     28  *
     29  * @see Cursor.getColumnIndexOrThrow
     30  * @see Cursor.getBlob
     31  */
     32 inline fun Cursor.getBlob(columnName: String): ByteArray =
     33     getBlob(getColumnIndexOrThrow(columnName))
     34 
     35 /**
     36  * Returns the value of the requested column as a double.
     37  *
     38  * The result and whether this method throws an exception when the column value is null or the
     39  * column type is not a floating-point type is implementation-defined.
     40  *
     41  * @see Cursor.getColumnIndexOrThrow
     42  * @see Cursor.getDouble
     43  */
     44 inline fun Cursor.getDouble(columnName: String): Double =
     45     getDouble(getColumnIndexOrThrow(columnName))
     46 
     47 /**
     48  * Returns the value of the requested column as a float.
     49  *
     50  * The result and whether this method throws an exception when the column value is null or the
     51  * column type is not a floating-point type is implementation-defined.
     52  *
     53  * @see Cursor.getColumnIndexOrThrow
     54  * @see Cursor.getFloat
     55  */
     56 inline fun Cursor.getFloat(columnName: String): Float = getFloat(getColumnIndexOrThrow(columnName))
     57 
     58 /**
     59  * Returns the value of the requested column as an integer.
     60  *
     61  * The result and whether this method throws an exception when the column value is null or the
     62  * column type is not an integral type is implementation-defined.
     63  *
     64  * @see Cursor.getColumnIndexOrThrow
     65  * @see Cursor.getInt
     66  */
     67 inline fun Cursor.getInt(columnName: String): Int = getInt(getColumnIndexOrThrow(columnName))
     68 
     69 /**
     70  * Returns the value of the requested column as a long.
     71  *
     72  * The result and whether this method throws an exception when the column value is null or the
     73  * column type is not an integral type is implementation-defined.
     74  *
     75  * @see Cursor.getColumnIndexOrThrow
     76  * @see Cursor.getLong
     77  */
     78 inline fun Cursor.getLong(columnName: String): Long = getLong(getColumnIndexOrThrow(columnName))
     79 
     80 /**
     81  * Returns the value of the requested column as a short.
     82  *
     83  * The result and whether this method throws an exception when the column value is null or the
     84  * column type is not an integral type is implementation-defined.
     85  *
     86  * @see Cursor.getColumnIndexOrThrow
     87  * @see Cursor.getShort
     88  */
     89 inline fun Cursor.getShort(columnName: String): Short = getShort(getColumnIndexOrThrow(columnName))
     90 
     91 /**
     92  * Returns the value of the requested column as a string.
     93  *
     94  * The result and whether this method throws an exception when the column value is null or the
     95  * column type is not a string type is implementation-defined.
     96  *
     97  * @see Cursor.getColumnIndexOrThrow
     98  * @see Cursor.getString
     99  */
    100 inline fun Cursor.getString(columnName: String): String =
    101     getString(getColumnIndexOrThrow(columnName))
    102 
    103 /**
    104  * Returns the value of the requested column as a nullable byte array.
    105  *
    106  * The result and whether this method throws an exception when the column type is not a blob type is
    107  * implementation-defined.
    108  *
    109  * @see Cursor.isNull
    110  * @see Cursor.getBlob
    111  */
    112 inline fun Cursor.getBlobOrNull(index: Int) = if (isNull(index)) null else getBlob(index)
    113 
    114 /**
    115  * Returns the value of the requested column as a nullable double.
    116  *
    117  * The result and whether this method throws an exception when the column type is not a
    118  * floating-point type is implementation-defined.
    119  *
    120  * @see Cursor.isNull
    121  * @see Cursor.getDouble
    122  */
    123 inline fun Cursor.getDoubleOrNull(index: Int) = if (isNull(index)) null else getDouble(index)
    124 
    125 /**
    126  * Returns the value of the requested column as a nullable float.
    127  *
    128  * The result and whether this method throws an exception when the column type is not a
    129  * floating-point type is implementation-defined.
    130  *
    131  * @see Cursor.isNull
    132  * @see Cursor.getFloat
    133  */
    134 inline fun Cursor.getFloatOrNull(index: Int) = if (isNull(index)) null else getFloat(index)
    135 
    136 /**
    137  * Returns the value of the requested column as a nullable integer.
    138  *
    139  * The result and whether this method throws an exception when the column type is not an integral
    140  * type is implementation-defined.
    141  *
    142  * @see Cursor.isNull
    143  * @see Cursor.getInt
    144  */
    145 inline fun Cursor.getIntOrNull(index: Int) = if (isNull(index)) null else getInt(index)
    146 
    147 /**
    148  * Returns the value of the requested column as a nullable long.
    149  *
    150  * The result and whether this method throws an exception when the column type is not an integral
    151  * type is implementation-defined.
    152  *
    153  * @see Cursor.isNull
    154  * @see Cursor.getLong
    155  */
    156 inline fun Cursor.getLongOrNull(index: Int) = if (isNull(index)) null else getLong(index)
    157 
    158 /**
    159  * Returns the value of the requested column as a nullable short.
    160  *
    161  * The result and whether this method throws an exception when the column type is not an integral
    162  * type is implementation-defined.
    163  *
    164  * @see Cursor.isNull
    165  * @see Cursor.getShort
    166  */
    167 inline fun Cursor.getShortOrNull(index: Int) = if (isNull(index)) null else getShort(index)
    168 
    169 /**
    170  * Returns the value of the requested column as a nullable string.
    171  *
    172  * The result and whether this method throws an exception when the column type is not a string type
    173  * is implementation-defined.
    174  *
    175  * @see Cursor.isNull
    176  * @see Cursor.getString
    177  */
    178 inline fun Cursor.getStringOrNull(index: Int) = if (isNull(index)) null else getString(index)
    179 
    180 /**
    181  * Returns the value of the requested column as a nullable byte array.
    182  *
    183  * The result and whether this method throws an exception when the column type is not a blob type is
    184  * implementation-defined.
    185  *
    186  * @see Cursor.getColumnIndexOrThrow
    187  * @see Cursor.isNull
    188  * @see Cursor.getBlob
    189  */
    190 inline fun Cursor.getBlobOrNull(columnName: String) =
    191     getColumnIndexOrThrow(columnName).let { if (isNull(it)) null else getBlob(it) }
    192 
    193 /**
    194  * Returns the value of the requested column as a nullable double.
    195  *
    196  * The result and whether this method throws an exception when the column type is not a
    197  * floating-point type is implementation-defined.
    198  *
    199  * @see Cursor.getColumnIndexOrThrow
    200  * @see Cursor.isNull
    201  * @see Cursor.getDouble
    202  */
    203 inline fun Cursor.getDoubleOrNull(columnName: String) =
    204     getColumnIndexOrThrow(columnName).let { if (isNull(it)) null else getDouble(it) }
    205 
    206 /**
    207  * Returns the value of the requested column as a nullable float.
    208  *
    209  * The result and whether this method throws an exception when the column type is not a
    210  * floating-point type is implementation-defined.
    211  *
    212  * @see Cursor.getColumnIndexOrThrow
    213  * @see Cursor.isNull
    214  * @see Cursor.getFloat
    215  */
    216 inline fun Cursor.getFloatOrNull(columnName: String) =
    217     getColumnIndexOrThrow(columnName).let { if (isNull(it)) null else getFloat(it) }
    218 
    219 /**
    220  * Returns the value of the requested column as a nullable integer.
    221  *
    222  * The result and whether this method throws an exception when the column type is not an integral
    223  * type is implementation-defined.
    224  *
    225  * @see Cursor.getColumnIndexOrThrow
    226  * @see Cursor.isNull
    227  * @see Cursor.getInt
    228  */
    229 inline fun Cursor.getIntOrNull(columnName: String) =
    230     getColumnIndexOrThrow(columnName).let { if (isNull(it)) null else getInt(it) }
    231 
    232 /**
    233  * Returns the value of the requested column as a nullable long.
    234  *
    235  * The result and whether this method throws an exception when the column type is not an integral
    236  * type is implementation-defined.
    237  *
    238  * @see Cursor.getColumnIndexOrThrow
    239  * @see Cursor.isNull
    240  * @see Cursor.getLong
    241  */
    242 inline fun Cursor.getLongOrNull(columnName: String) =
    243     getColumnIndexOrThrow(columnName).let { if (isNull(it)) null else getLong(it) }
    244 
    245 /**
    246  * Returns the value of the requested column as a nullable short.
    247  *
    248  * The result and whether this method throws an exception when the column type is not an integral
    249  * type is implementation-defined.
    250  *
    251  * @see Cursor.getColumnIndexOrThrow
    252  * @see Cursor.isNull
    253  * @see Cursor.getShort
    254  */
    255 inline fun Cursor.getShortOrNull(columnName: String) =
    256     getColumnIndexOrThrow(columnName).let { if (isNull(it)) null else getShort(it) }
    257 
    258 /**
    259  * Returns the value of the requested column as a nullable string.
    260  *
    261  * The result and whether this method throws an exception when the column type is not a string type
    262  * is implementation-defined.
    263  *
    264  * @see Cursor.getColumnIndexOrThrow
    265  * @see Cursor.isNull
    266  * @see Cursor.getString
    267  */
    268 inline fun Cursor.getStringOrNull(columnName: String) =
    269     getColumnIndexOrThrow(columnName).let { if (isNull(it)) null else getString(it) }
    270