/// <summary> /// Method to get the number of features in the datasource /// </summary> /// <returns>The number of features</returns> protected virtual int GetFeatureCountInternal() { using (var conn = CreateOpenDbConnection()) { using (var command = conn.CreateCommand()) { var sql = new StringBuilder(); sql.AppendFormat("SELECT COUNT(*) FROM {0}", _dbUtility.DecorateEntity(Table)); #pragma warning disable 612,618 if (!String.IsNullOrEmpty(DefinitionQuery)) { sql.AppendFormat(" WHERE {0}", DefinitionQuery); } #pragma warning restore 612,618 else { sql.Append(FeatureColumns.GetWhereClause()); } sql.Append(";"); command.CommandText = sql.ToString(); return((int)command.ExecuteScalar()); } } }
/// <summary> /// Function to get a specific feature from the database. /// </summary> /// <param name="oid">The object id</param> /// <returns>A feature data row</returns> protected virtual FeatureDataRow GetFeatureInternal(uint oid) { using (var cn = CreateOpenDbConnection()) { using (var cmd = cn.CreateCommand()) { cmd.CommandText = FeatureColumns.GetSelectClause(From) + string.Format(" WHERE {0}={1};", _dbUtility.DecorateEntity(ObjectIdColumn), oid); Logger.Debug(t => t("Executing query:\n{0}", PrintCommand(cmd))); using (var dr = cmd.ExecuteReader()) { if (dr.HasRows) { dr.Read(); var fdt = CreateNewTable(); FeatureDataRow row = null; fdt.BeginLoadData(); var numColumns = fdt.Columns.Count; var data = new object[numColumns + 1]; if (dr.GetValues(data) > 0) { var loadData = new object[numColumns]; Array.Copy(data, 0, loadData, 0, numColumns); row = (FeatureDataRow)fdt.LoadDataRow(loadData, true); row.Geometry = GeometryFromWKB.Parse((byte[])data[numColumns], Factory); } fdt.EndLoadData(); return(row); } } } } return(null); }
/// <summary> /// Gets the SQL ORDER BY clause. /// </summary> /// <returns>The order by</returns> public string GetOrderByClause() { var orderBy = string.Empty; foreach (var featureColumn in Items) { switch (featureColumn.OrderBy) { case null: continue; case "ASC": orderBy += string.Format(", {0}", _spatialDbUtility.DecorateEntity(featureColumn.As)); break; case "DESC": orderBy += string.Format(", {0} DESC", _spatialDbUtility.DecorateEntity(featureColumn.As)); break; } } return(orderBy.Length > 0 ? orderBy.Substring(2) : null); }