Retrieving Schema Definition¶
Backendless provides API for data table schema introspection. The API returns information about table's columns and their data types, whether a value for a column is required or if there is a default value.
- (void)describeWithTableName:(NSString * _Nonnull)tableName responseHandler:^(NSArray<ObjectProperty *> * _Nonnull)responseHandler errorHandler:^(Fault * _Nonnull)errorHandler;
func describe(tableName: String, responseHandler: (([ObjectProperty]) -> Void)! errorHandler: ((Fault) -> Void)!)
where:
Argument | Description |
---|---|
tableName |
name of a data table to get the schema for. |
responseHandler |
a block (closure) to handle successful result of an asynchronous call. |
errorHandler |
a block (closure) to handle fault result of an asynchronous call. |
Return value¶
The API returns the array of the ObjectProperty
objects. The ObjectProperty
protocol has the following properties:
Argument | Description |
---|---|
autoLoad |
applies only to relations. If true, the property is set to auto-load related data for the data retrieval queries. |
customRegex |
a regular expression assigned to the column as a validator. The validator applies when a new object is saved in the table or an existing one is updated. |
defaultValue |
a default value assigned to any object saved/updated in the table where the column does not have a value. |
identity |
true if the column is or is a part of a primary key. |
name |
contains the name of a property. |
relatedTable |
contains the name of the related table(s). |
required |
A boolean value defining whether a property is optional or required for the requests which save the initial object or update an existing one. |
type: DataTypeEnum |
defines the column type. |
Example¶
Suppose the Person
table has the following schema - there are two developer-defined columns, age
and name
The following code retrieves the schema definition for the Person
table:
[Backendless.shared.data describeWithTableName:@"Person" responseHandler:^(NSArray<ObjectProperty *> *properties) {
for (ObjectProperty *property in properties) {
NSLog(@"property name - %@", property.name);
NSLog(@" is property required - %s", property.required ? "true" : "false");
NSLog(@" property data type - %@", [property getTypeName]);
NSLog(@" default value - %@", property.defaultValue);
NSLog(@" is property primary key - %s", property.isPrimaryKey ? "true" : "false");
}
} errorHandler:^(Fault *fault) {
NSLog(@"Error: %@", fault.message);
}];
Backendless.shared.data.describe(tableName: "Person", responseHandler: { properties in
for property in properties {
print("property name - \(property.name)")
print(" is property required - \(property.required)")
print(" property data type - \(property.getTypeName())")
print(" default value - \(property.defaultValue ?? NSNull())")
print(" is property primary key - \(property.isPrimaryKey)")
}
}, errorHandler: { fault in
print("Error: \(fault.message ?? "")")
})
The code produces the following output:
property name - objectId
is property required - false
property data type - STRING_ID
default value - null
is property primary key - true
property name - age
is property required - false
property data type - INT
default value - null
is property primary key - false
property name - updated
is property required - false
property data type - DATETIME
default value - null
is property primary key - false
property name - name
is property required - false
property data type - STRING
default value - null
is property primary key - false
property name - created
is property required - false
property data type - DATETIME
default value - null
is property primary key - false
property name - ownerId
is property required - false
property data type - STRING
default value - null
is property primary key - false