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