pub struct Plants {Show 29 fields
pub id: i32,
pub unique_name: String,
pub common_name_en: Option<Vec<Option<String>>>,
pub common_name_de: Option<Vec<Option<String>>>,
pub functions: Option<String>,
pub shade: Option<Shade>,
pub soil_texture: Option<Vec<Option<SoilTextureEnum>>>,
pub herbaceous_or_woody: Option<HerbaceousOrWoody>,
pub life_cycle: Option<Vec<Option<LifeCycle>>>,
pub height: Option<i32>,
pub created_at: NaiveDateTime,
pub updated_at: NaiveDateTime,
pub has_drought_tolerance: Option<bool>,
pub hardiness_zone: Option<String>,
pub light_requirement: Option<Vec<Option<LightRequirement>>>,
pub water_requirement: Option<Vec<Option<WaterRequirementEnum>>>,
pub edible: Option<bool>,
pub edible_parts: Option<Vec<Option<String>>>,
pub spread: Option<i32>,
pub warning: Option<String>,
pub version: Option<i16>,
pub sowing_outdoors: Option<Vec<Option<i16>>>,
pub harvest_time: Option<Vec<Option<i16>>>,
pub rank: Option<TaxonomicRank>,
pub family: Option<i32>,
pub genus: Option<i32>,
pub species: Option<i32>,
pub variety: Option<i32>,
pub icon_path: Option<String>,
}Expand description
The Plants entity builds up an hierarchical structure, see /doc/database/hierarchy.md:
§Hierarchy
This document explains the hierarchy of the plant table. Please make sure that you already read the biology section of the glossary.
§Introduction
The plant table contains entries of:
- concrete plants, or
- abstract plants (representants of ranks)
Concrete plants can be:
- dragged and dropped to the map and
- used as seed entry.
Abstract plants can be:
- used to inherit attributes.
A concrete plant can be one of the following ranks:
- on species level, or
- on variety level, or
- on cultivar level.
Furthermore, the following must be true:
- a genus is below a family,
- specie is below a genus,
- a variety is below specie,
- a cultivar is below to a specie or a variety
The diagram below shows the hierarchy of entities with height and width as an example of attribute classification.
classDiagram
class Family:::abstract {
+int height
+int width
}
class Genus:::abstract {
+int height
+int width
}
class Species {
+int height
+int width
}
class Variety {
+int height
+int width
}
class Cultivar {
+int height
+int width
}
Variety <|-- Cultivar
Species <|-- Cultivar
Species <|-- Variety
Genus <|-- Species
Family <|-- GenusEach of these entities can have their own attributes. E.g., a variety below specie can have different height than the specie itself.
§Unique Name
In the database we have a column unique_name.
The unique name is, either for abstract plants:
- single latin word to specify “family”, which always ends on:
-aceae - single latin word to specify “genus”
Or is built up by several words (for concrete plants):
- single latin word to specify “genus”
- single latin word to specify “specie”
- optional single latin word to specify “variety”
- optional several words in single quotes to specify “cultivar”, which starts with a capital letter
E.g. Brassica oleracea italica 'Ramoso calabrese'
§Hybrid Names
Hybrid names are built up differently. Either two parent binomials, separated by an “x” or “×” or a given binomial, with or without an intercalated “×” (see Wikipedia). So the name does not necessarily say if a plant is a hybrid.
There is no special handling of hybrid names necessary, as the hybrid name is stored as the unique name in the database.
§Displaying the Unique Name
The unique name of a plant should be displayed as follows:
- Latin name should be displayed in italics.
- The cultivar name should be in regular font, enclosed in single quotes (as stored in the database).
For example: Brassica oleracea italica ‘Ramoso calabrese’
The unique name alone usually is not displayed.
§Displaying the Complete Name
The complete name of a plant should be displayed as follows:
- If there is a common name, the common name appears first and should start with a capital letter (e.g., “tomato” becomes “Tomato”).
- If it is a plant name from the seed database, the name continues with hyphen
-and the additional name. - This is followed by the unique name in brackets, unique name as described above in Unique Name.
The general format is:
Common name - additional name (unique name)
In cases where the common name is not available in the current language, it should be displayed as:
unique name - additional name
The cultivar is a part of the unique name.
For example (assuming Brassica oleracea italica doesn’t have a common name):
- Italian broccoli - violett (Brassica oleracea italica ‘Ramoso calabrese’)
- Italian broccoli - violett (Brassica oleracea italica)
- Italian broccoli (Brassica oleracea italica)
- Brassica oleracea italica ‘Ramoso calabrese’ - violett
- Brassica oleracea italica ‘Ramoso calabrese’
- Brassica oleracea italica - violett
- Brassica oleracea italica
§Displaying the Short Name
The short name should be displayed as follows:
- Common name or, if common name is not available, the unique name as described above in Unique Name.
- If additional name is available,
-and the additional name should be appended.
For example (assuming Abies mariesii and Brassica oleracea italica don’t have common names):
- Tomato - Gelbe Birne
- Abies mariesii
- Brassica oleracea italica ‘Ramoso calabrese’ - violett
§Displaying the Group Name
The group name should be displayed as follows:
- Same format (short name/complete name) as a single plant.
- However, parts of the name should be omitted based on the hierarchy laid out in Introductions if that part or a part above it is not common among all grouped plants.
For example:
- two fully matching plants → full unique name and additional name is displayed
- two mostly matching plants (mismatched cultivar) → only cultivar is omitted
- two barely matching plants (matching family) → only family is displayed
- two distinct plants → no parts of the unique name or additional name are displayed
§Usage of Plant Names
- The short name is for overviews, e.g., when you see all labels in the map editor at once (plant labels).
- The complete name should always be given if the user wants to know precisely which plant she is dealing with, e.g.:
- when the mouse is hovering over a plant in the plant layer,
- in search results or
- in plant details (left bottom toolbar).
- The additional name must always be added if a plant is connected with a seed.
- The group name should always be given if information about multiple plants is grouped together, like e.g., the plant details.
§Rules
We know about names (abstract and concrete, including hybrid):
- If it contains more than one word, it is a concrete plant.
- If it contains only one word, it is an abstract plant (family or genus).
- All entries with two words are specie (de: Art),
- All entries with three or more words are either:
- variety (de: Varietät) if all is spelled italic, or
- cultivar (de: Sorte) if the last part of the name (can be more than one word!) is not latin, not italic, is in ‘single quotes’
- All entries with a single x between the words are hybrid. We treat them like specie.
§Inserting Relations
When inserting, family, genus, specie and variety must be treated in a way that they also include all entries below in the hierarchy. Important is that the processing is from most generic to most specific, so that specific entries overwrite generic entries.
§Attributes
Columns are documented in their respective structs.
We prefer strongly typed data, e.g.:
- enums
- array of enums
- numbers
Columns that contain text should be suffixed with:
_enfor English text_defor German text
As we often copy data from other sources, we maintain the following columns for external references:
external_source: an array from enum where the first entry is the “main source” the other columns refer to:external_id: an identifier of that sourceexternal_url: the URL from where the data was taken
Plants are additionally classified as:
is_concrete_plant(is a concrete plant as opposite to an abstract plant)is_tree(as search help within the tree layer)
§from Permapeople
The following columns are removed:
environment(and its references)typeandis_variety, as variety is now determined from the name (rankto be calculated from name, see above)wildflowerplants_of_the_world_online_name_synonym(redundant to link)dutch_name,danish_name,french_namewhen_to_harvestpropagation_cuttingsalternate_scientific_namehortipediainvasive_inyears_to_bearuseful_tropical_plantsthinninglight_tolerancechill_hours,beef_tomato,invasivefolder_name(at least in DB)native_climate_zonesadapted_climate_zonespropagation_direct_sowing
Other minor problems:
- fix Labiatae to be lamiaceae (family rank)
- Remove all “var.” from the database entries (staying with the three words).
§from Reinsaat
Unique name:
- use
Scientific name subheadingtogether withname(as cultivar, see above) for ourunique_name(Cucurbita ssp.fromScientific name kulturhinweiseshouldn’t exist) - Remove all occurrences of
L.,MIll., andvar.. - Entries on Reinsaat that are spelled like “Brassica oleracea convar. botrytis var. italica” https://www.reinsaat.at/shop/EN/brassica/broccoli/limba/ exist in our database as “Brassica oleracea italica”.
Add the Reinsaat entry to our database in a different row with the following nomenclature:
Brassica oleracea italica ‘Limba’, with
Brassica oleracea italicaas parent, by following rules:- Remove the term “convar.” and its following word.
- Remove the “ssp.” and its following word.
- The
namemaps to cultivar (de: Sorte), i.e., a rank below variety and is expressed in non-latin words, such as ‘Limba’. In our database, we want them:- back together in one name (the unique name, as described above) e.g., Brassica oleracea italica ‘Limba’ or Malus domestica ‘Gala’.
- with a link to the variety, if present, otherwise species
Individual problems:
- Daucus carota L. ssp. sativus –> Daucus carota sativus
- Petroselinum crispum ssp. tuberosum –> Petroselinum crispum tuberosum
- Papaver somnif. var. paeonifl. –> Papaver somniferum paeoniflorum
- Alcea rosea fl. pl. –> Alcea rosea flore pleno
- Campanula lat. macr. –> Campanula latifolia macrantha
- Malva sylvestris ssp. maur. –> Malva sylvestris mauritiana
- Sonnenblume, Velvet Queen:
Noneshould beHelianthus annuus
§Further Readings
- The Rationale is explained in this decision.
Fields§
§id: i32- The internal id of the plant.
- Fill ratio: 100%
unique_name: String- The unique name of the plant.
- The structure is described above (
doc/database/hierarchy.md). - Fill ratio: 100%
common_name_en: Option<Vec<Option<String>>>- The list of the common names of the plant in English.
- Fetched from
PracticalPlantsand Permapeople. - Fill ratio: 90%
common_name_de: Option<Vec<Option<String>>>- The list of the common names of the plant in German.
- Fetched from Wikidata API if not present in any source datasets.
- Fill ratio: 25%
functions: Option<String>- TODO: use in search (and attribute)
- Used for search ranking (diversity).
- ecological and environmental function of the plant, especially nitrogen fixer is relevant for
PermaplanT. - Fetched from
PracticalPlants) - Fill ratio: 13%
shade: Option<Shade>- Shade tolerance of the plant, to be used together with
light_requirement. - Used in shade layer.
- For example a plant that has “no shade”, should get a warning if placed in a shade.
- No shade: full sun exposure
- Light shade: moderately shaded throughout the day
- Partial shade: about 3-6 hours of direct sunlight
- Permanent shade: less than 3 hours of direct sunlight
- Shade indicates the shade tolerance. Plants obviously grow better with better light conditions.
- Warnings should only show if a plant is moved into a too dark spot. No warning should be shown when moved into a lighter spot.
- Fetched from
PracticalPlants. - Fill ratio: 63%
soil_texture: Option<Vec<Option<SoilTextureEnum>>>- See explanation in
/doc/architecture/context.md - Used in soil layer.
- Fetched from
PracticalPlantsand Permapeople (merged withsoil_typeof Permapeople). - Fill ratio: 88%
herbaceous_or_woody: Option<HerbaceousOrWoody>- TODO: use in attribute
- Only informational.
- Fetched from
PracticalPlants - informs about the plant physiology
- woody = grows woody parts
- herbaceous = doesn’t grow wood, shoots remain soft/green.
- Fill ratio: 26%
life_cycle: Option<Vec<Option<LifeCycle>>>- Use in search and attribute
- Determines life span of the plant.
- Fetched from
PracticalPlantsand Permapeople (merged withlife_cycleof Permapeople). - Fill ratio: 68%
height: Option<i32>- Only informational, is in rw attribute
- Fetched from
PracticalPlantsasmature_size_heightand merged with Permapeople. - informs about the maximum height that the plant gains in cm
- Fill ratio: 80%
created_at: NaiveDateTime- Is readonly in attribute
- The creation date of the entry (actual time).
- Only for administration.
- Fill ratio: 100%
updated_at: NaiveDateTime- Is readonly in attribute
- The last update date of the entry (actual time).
- Only for administration.
- Fill ratio: 100%
has_drought_tolerance: Option<bool>- ! TODO: show in attributes and search (icon)
- Will be used in watering layer.
- Fetched from
PracticalPlantsand merged withhas_drought_toleranceof Permapeople. - Fill ratio: 57%
hardiness_zone: Option<String>- TODO: show in search
- USDA Hardiness Zone (without subranges).
- Important information.
- Fetched from
PracticalPlantsand Permapeople (merged withusda_hardiness_zoneof Permapeople). - Fill ratio: 63%
light_requirement: Option<Vec<Option<LightRequirement>>>- Shade tolerance of the plant, to be used together with shade.
- Used in shade layer.
- For example a plant that has “Full sun”, should get a warning if placed in a shade.
- Fetched from*
PracticalPlantsand Permapeople (merged withsunofPracticalPlants) - Full sun: full sun exposure
- Partial sun/shade: about 3-6 hours of direct sunlight or moderately shaded throughout the day
- Full shade: less than 3 hours of direct sunlight or almost no sunlight/no direct sunlight
- Fill ratio: 88%
water_requirement: Option<Vec<Option<WaterRequirementEnum>>>- Used in hydrology layer.
- Fetched from
PracticalPlantsand Permapeople (merged withwaterofPracticalPlants). - water = completely aquatic;
- wet = drowned, (often) flooded or in general very moist, e.g. swamp;
- moist = humid, regular water supply, e.g. flat bed with humus;
- well drained = dry, little water input.
- Fill ratio: 88%
edible: Option<bool>- TODO: use in search (and as attribute)
- Important information.
- Fetched from Permapeople.
- Fill ratio: 62%
edible_parts: Option<Vec<Option<String>>>- TODO: use as attribute (translation in frontend)
- Only informational.
- Fetched from Permapeople.
- which organ of the plant can be eaten, e.g. root, leaves.
- Fill ratio: 61%
spread: Option<i32>- Used
- How far a plant spreads (The ‘width’ of a plant) in cm
- Fetched from Permapeople.
- Fill ratio: 0.1%
warning: Option<String>- TODO: use in search (and as attribute)
- Important information.
- Fetched from Permapeople.
- specific warnings for eather human, animal or environmental well-being, e.g. toxic, invasive.
- Fill ratio: 8%
version: Option<i16>- TODO: add to attributes
- Only for administration.
- The version of the entry.
- To be incremented after every relevant change.
- Fetched from Permapeople.
- Fill ratio: 90%
sowing_outdoors: Option<Vec<Option<i16>>>- TODO: use as attribute
- String array of numbers representing a time period.
- The year is divided into 24 periods of half a month each.
- For example “[8,9,10]” means from the 2nd half of April to the 2nd half of May incl.
- Fetched from Reinsaat
Aussaat/ Pflanzung Freilandshould be calledsowing_outdoors- Fill ratio: 5%
harvest_time: Option<Vec<Option<i16>>>- TODO: use as attribute
- String array of numbers representing a time period.
- The year is divided into 24 periods of half a month each.
- For example “[8,9,10]” means from the 2nd half of April to the 2nd half of May incl.
Ernteshould be calledharvest_time- Fetched from Reinsaat
- Fill ratio: 6%
rank: Option<TaxonomicRank>- Hierarchy fields
- Either Fetched from
PracticalPlantsand Permapeople - Or determined from the unique name
- Or set by scraper overrides
family: Option<i32>§genus: Option<i32>§species: Option<i32>§variety: Option<i32>§icon_path: Option<String>- The path to the icon of the plant.
Implementations§
Source§impl Plants
impl Plants
Sourcepub async fn search(
search_query: &str,
page_parameters: PageParameters,
conn: &mut AsyncPgConnection,
) -> QueryResult<Page<PlantsSummaryDto>>
pub async fn search( search_query: &str, page_parameters: PageParameters, conn: &mut AsyncPgConnection, ) -> QueryResult<Page<PlantsSummaryDto>>
Get the top plants matching the search query.
Uses pg_trgm to find matches in unique_name, common_name_de, common_name_en and edible_uses_en.
Ranks them using the pg_trgm function similarity().
§Errors
- Unknown, diesel doesn’t say why it might error.
Sourcepub async fn find_any(
page_parameters: PageParameters,
conn: &mut AsyncPgConnection,
) -> QueryResult<Page<PlantsSummaryDto>>
pub async fn find_any( page_parameters: PageParameters, conn: &mut AsyncPgConnection, ) -> QueryResult<Page<PlantsSummaryDto>>
Sourcepub async fn find_by_id(
id: i32,
conn: &mut AsyncPgConnection,
) -> QueryResult<PlantsSummaryDto>
pub async fn find_by_id( id: i32, conn: &mut AsyncPgConnection, ) -> QueryResult<PlantsSummaryDto>
Trait Implementations§
Source§impl From<Plants> for PlantsSummaryDto
impl From<Plants> for PlantsSummaryDto
Source§impl<'ident> Identifiable for &'ident Plants
impl<'ident> Identifiable for &'ident Plants
Source§impl<__DB: Backend, __ST0, __ST1, __ST2, __ST3, __ST4, __ST5, __ST6, __ST7, __ST8, __ST9, __ST10, __ST11, __ST12, __ST13, __ST14, __ST15, __ST16, __ST17, __ST18, __ST19, __ST20, __ST21, __ST22, __ST23, __ST24, __ST25, __ST26, __ST27, __ST28> Queryable<(__ST0, __ST1, __ST2, __ST3, __ST4, __ST5, __ST6, __ST7, __ST8, __ST9, __ST10, __ST11, __ST12, __ST13, __ST14, __ST15, __ST16, __ST17, __ST18, __ST19, __ST20, __ST21, __ST22, __ST23, __ST24, __ST25, __ST26, __ST27, __ST28), __DB> for Plantswhere
(i32, String, Option<Vec<Option<String>>>, Option<Vec<Option<String>>>, Option<String>, Option<Shade>, Option<Vec<Option<SoilTextureEnum>>>, Option<HerbaceousOrWoody>, Option<Vec<Option<LifeCycle>>>, Option<i32>, NaiveDateTime, NaiveDateTime, Option<bool>, Option<String>, Option<Vec<Option<LightRequirement>>>, Option<Vec<Option<WaterRequirementEnum>>>, Option<bool>, Option<Vec<Option<String>>>, Option<i32>, Option<String>, Option<i16>, Option<Vec<Option<i16>>>, Option<Vec<Option<i16>>>, Option<TaxonomicRank>, Option<i32>, Option<i32>, Option<i32>, Option<i32>, Option<String>): FromStaticSqlRow<(__ST0, __ST1, __ST2, __ST3, __ST4, __ST5, __ST6, __ST7, __ST8, __ST9, __ST10, __ST11, __ST12, __ST13, __ST14, __ST15, __ST16, __ST17, __ST18, __ST19, __ST20, __ST21, __ST22, __ST23, __ST24, __ST25, __ST26, __ST27, __ST28), __DB>,
impl<__DB: Backend, __ST0, __ST1, __ST2, __ST3, __ST4, __ST5, __ST6, __ST7, __ST8, __ST9, __ST10, __ST11, __ST12, __ST13, __ST14, __ST15, __ST16, __ST17, __ST18, __ST19, __ST20, __ST21, __ST22, __ST23, __ST24, __ST25, __ST26, __ST27, __ST28> Queryable<(__ST0, __ST1, __ST2, __ST3, __ST4, __ST5, __ST6, __ST7, __ST8, __ST9, __ST10, __ST11, __ST12, __ST13, __ST14, __ST15, __ST16, __ST17, __ST18, __ST19, __ST20, __ST21, __ST22, __ST23, __ST24, __ST25, __ST26, __ST27, __ST28), __DB> for Plantswhere
(i32, String, Option<Vec<Option<String>>>, Option<Vec<Option<String>>>, Option<String>, Option<Shade>, Option<Vec<Option<SoilTextureEnum>>>, Option<HerbaceousOrWoody>, Option<Vec<Option<LifeCycle>>>, Option<i32>, NaiveDateTime, NaiveDateTime, Option<bool>, Option<String>, Option<Vec<Option<LightRequirement>>>, Option<Vec<Option<WaterRequirementEnum>>>, Option<bool>, Option<Vec<Option<String>>>, Option<i32>, Option<String>, Option<i16>, Option<Vec<Option<i16>>>, Option<Vec<Option<i16>>>, Option<TaxonomicRank>, Option<i32>, Option<i32>, Option<i32>, Option<i32>, Option<String>): FromStaticSqlRow<(__ST0, __ST1, __ST2, __ST3, __ST4, __ST5, __ST6, __ST7, __ST8, __ST9, __ST10, __ST11, __ST12, __ST13, __ST14, __ST15, __ST16, __ST17, __ST18, __ST19, __ST20, __ST21, __ST22, __ST23, __ST24, __ST25, __ST26, __ST27, __ST28), __DB>,
Source§type Row = (i32, String, Option<Vec<Option<String>>>, Option<Vec<Option<String>>>, Option<String>, Option<Shade>, Option<Vec<Option<SoilTextureEnum>>>, Option<HerbaceousOrWoody>, Option<Vec<Option<LifeCycle>>>, Option<i32>, NaiveDateTime, NaiveDateTime, Option<bool>, Option<String>, Option<Vec<Option<LightRequirement>>>, Option<Vec<Option<WaterRequirementEnum>>>, Option<bool>, Option<Vec<Option<String>>>, Option<i32>, Option<String>, Option<i16>, Option<Vec<Option<i16>>>, Option<Vec<Option<i16>>>, Option<TaxonomicRank>, Option<i32>, Option<i32>, Option<i32>, Option<i32>, Option<String>)
type Row = (i32, String, Option<Vec<Option<String>>>, Option<Vec<Option<String>>>, Option<String>, Option<Shade>, Option<Vec<Option<SoilTextureEnum>>>, Option<HerbaceousOrWoody>, Option<Vec<Option<LifeCycle>>>, Option<i32>, NaiveDateTime, NaiveDateTime, Option<bool>, Option<String>, Option<Vec<Option<LightRequirement>>>, Option<Vec<Option<WaterRequirementEnum>>>, Option<bool>, Option<Vec<Option<String>>>, Option<i32>, Option<String>, Option<i16>, Option<Vec<Option<i16>>>, Option<Vec<Option<i16>>>, Option<TaxonomicRank>, Option<i32>, Option<i32>, Option<i32>, Option<i32>, Option<String>)
Source§fn build(
row: (i32, String, Option<Vec<Option<String>>>, Option<Vec<Option<String>>>, Option<String>, Option<Shade>, Option<Vec<Option<SoilTextureEnum>>>, Option<HerbaceousOrWoody>, Option<Vec<Option<LifeCycle>>>, Option<i32>, NaiveDateTime, NaiveDateTime, Option<bool>, Option<String>, Option<Vec<Option<LightRequirement>>>, Option<Vec<Option<WaterRequirementEnum>>>, Option<bool>, Option<Vec<Option<String>>>, Option<i32>, Option<String>, Option<i16>, Option<Vec<Option<i16>>>, Option<Vec<Option<i16>>>, Option<TaxonomicRank>, Option<i32>, Option<i32>, Option<i32>, Option<i32>, Option<String>),
) -> Result<Self>
fn build( row: (i32, String, Option<Vec<Option<String>>>, Option<Vec<Option<String>>>, Option<String>, Option<Shade>, Option<Vec<Option<SoilTextureEnum>>>, Option<HerbaceousOrWoody>, Option<Vec<Option<LifeCycle>>>, Option<i32>, NaiveDateTime, NaiveDateTime, Option<bool>, Option<String>, Option<Vec<Option<LightRequirement>>>, Option<Vec<Option<WaterRequirementEnum>>>, Option<bool>, Option<Vec<Option<String>>>, Option<i32>, Option<String>, Option<i16>, Option<Vec<Option<i16>>>, Option<Vec<Option<i16>>>, Option<TaxonomicRank>, Option<i32>, Option<i32>, Option<i32>, Option<i32>, Option<String>), ) -> Result<Self>
Source§impl<__DB: Backend> QueryableByName<__DB> for Plantswhere
i32: FromSql<SqlTypeOf<id>, __DB>,
String: FromSql<SqlTypeOf<unique_name>, __DB>,
Option<Vec<Option<String>>>: FromSql<SqlTypeOf<common_name_en>, __DB> + FromSql<SqlTypeOf<common_name_de>, __DB> + FromSql<SqlTypeOf<edible_parts>, __DB>,
Option<String>: FromSql<SqlTypeOf<functions>, __DB> + FromSql<SqlTypeOf<hardiness_zone>, __DB> + FromSql<SqlTypeOf<warning>, __DB> + FromSql<SqlTypeOf<icon_path>, __DB>,
Option<Shade>: FromSql<SqlTypeOf<shade>, __DB>,
Option<Vec<Option<SoilTextureEnum>>>: FromSql<SqlTypeOf<soil_texture>, __DB>,
Option<HerbaceousOrWoody>: FromSql<SqlTypeOf<herbaceous_or_woody>, __DB>,
Option<Vec<Option<LifeCycle>>>: FromSql<SqlTypeOf<life_cycle>, __DB>,
Option<i32>: FromSql<SqlTypeOf<height>, __DB> + FromSql<SqlTypeOf<spread>, __DB> + FromSql<SqlTypeOf<family>, __DB> + FromSql<SqlTypeOf<genus>, __DB> + FromSql<SqlTypeOf<species>, __DB> + FromSql<SqlTypeOf<variety>, __DB>,
NaiveDateTime: FromSql<SqlTypeOf<created_at>, __DB> + FromSql<SqlTypeOf<updated_at>, __DB>,
Option<bool>: FromSql<SqlTypeOf<has_drought_tolerance>, __DB> + FromSql<SqlTypeOf<edible>, __DB>,
Option<Vec<Option<LightRequirement>>>: FromSql<SqlTypeOf<light_requirement>, __DB>,
Option<Vec<Option<WaterRequirementEnum>>>: FromSql<SqlTypeOf<water_requirement>, __DB>,
Option<i16>: FromSql<SqlTypeOf<version>, __DB>,
Option<Vec<Option<i16>>>: FromSql<SqlTypeOf<sowing_outdoors>, __DB> + FromSql<SqlTypeOf<harvest_time>, __DB>,
Option<TaxonomicRank>: FromSql<SqlTypeOf<rank>, __DB>,
impl<__DB: Backend> QueryableByName<__DB> for Plantswhere
i32: FromSql<SqlTypeOf<id>, __DB>,
String: FromSql<SqlTypeOf<unique_name>, __DB>,
Option<Vec<Option<String>>>: FromSql<SqlTypeOf<common_name_en>, __DB> + FromSql<SqlTypeOf<common_name_de>, __DB> + FromSql<SqlTypeOf<edible_parts>, __DB>,
Option<String>: FromSql<SqlTypeOf<functions>, __DB> + FromSql<SqlTypeOf<hardiness_zone>, __DB> + FromSql<SqlTypeOf<warning>, __DB> + FromSql<SqlTypeOf<icon_path>, __DB>,
Option<Shade>: FromSql<SqlTypeOf<shade>, __DB>,
Option<Vec<Option<SoilTextureEnum>>>: FromSql<SqlTypeOf<soil_texture>, __DB>,
Option<HerbaceousOrWoody>: FromSql<SqlTypeOf<herbaceous_or_woody>, __DB>,
Option<Vec<Option<LifeCycle>>>: FromSql<SqlTypeOf<life_cycle>, __DB>,
Option<i32>: FromSql<SqlTypeOf<height>, __DB> + FromSql<SqlTypeOf<spread>, __DB> + FromSql<SqlTypeOf<family>, __DB> + FromSql<SqlTypeOf<genus>, __DB> + FromSql<SqlTypeOf<species>, __DB> + FromSql<SqlTypeOf<variety>, __DB>,
NaiveDateTime: FromSql<SqlTypeOf<created_at>, __DB> + FromSql<SqlTypeOf<updated_at>, __DB>,
Option<bool>: FromSql<SqlTypeOf<has_drought_tolerance>, __DB> + FromSql<SqlTypeOf<edible>, __DB>,
Option<Vec<Option<LightRequirement>>>: FromSql<SqlTypeOf<light_requirement>, __DB>,
Option<Vec<Option<WaterRequirementEnum>>>: FromSql<SqlTypeOf<water_requirement>, __DB>,
Option<i16>: FromSql<SqlTypeOf<version>, __DB>,
Option<Vec<Option<i16>>>: FromSql<SqlTypeOf<sowing_outdoors>, __DB> + FromSql<SqlTypeOf<harvest_time>, __DB>,
Option<TaxonomicRank>: FromSql<SqlTypeOf<rank>, __DB>,
Auto Trait Implementations§
impl Freeze for Plants
impl RefUnwindSafe for Plants
impl Send for Plants
impl Sync for Plants
impl Unpin for Plants
impl UnwindSafe for Plants
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<DB, T> FromSqlRow<Untyped, DB> for Twhere
DB: Backend,
T: QueryableByName<DB>,
impl<DB, T> FromSqlRow<Untyped, DB> for Twhere
DB: Backend,
T: QueryableByName<DB>,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> IntoSql for T
impl<T> IntoSql for T
Source§fn into_sql<T>(self) -> Self::Expression
fn into_sql<T>(self) -> Self::Expression
self to an expression for Diesel’s query builder. Read moreSource§fn as_sql<'a, T>(&'a self) -> <&'a Self as AsExpression<T>>::Expression
fn as_sql<'a, T>(&'a self) -> <&'a Self as AsExpression<T>>::Expression
&self to an expression for Diesel’s query builder. Read moreSource§impl<T, Conn> RunQueryDsl<Conn> for T
impl<T, Conn> RunQueryDsl<Conn> for T
Source§fn execute<'conn, 'query>(
self,
conn: &'conn mut Conn,
) -> <Conn as AsyncConnection>::ExecuteFuture<'conn, 'query>
fn execute<'conn, 'query>( self, conn: &'conn mut Conn, ) -> <Conn as AsyncConnection>::ExecuteFuture<'conn, 'query>
Source§fn load<'query, 'conn, U>(
self,
conn: &'conn mut Conn,
) -> AndThen<Self::LoadFuture<'conn>, TryCollect<Self::Stream<'conn>, Vec<U>>, fn(_: Self::Stream<'conn>) -> TryCollect<Self::Stream<'conn>, Vec<U>>>
fn load<'query, 'conn, U>( self, conn: &'conn mut Conn, ) -> AndThen<Self::LoadFuture<'conn>, TryCollect<Self::Stream<'conn>, Vec<U>>, fn(_: Self::Stream<'conn>) -> TryCollect<Self::Stream<'conn>, Vec<U>>>
Source§fn load_stream<'conn, 'query, U>(
self,
conn: &'conn mut Conn,
) -> Self::LoadFuture<'conn>where
Conn: AsyncConnection,
U: 'conn,
Self: LoadQuery<'query, Conn, U> + 'query,
fn load_stream<'conn, 'query, U>(
self,
conn: &'conn mut Conn,
) -> Self::LoadFuture<'conn>where
Conn: AsyncConnection,
U: 'conn,
Self: LoadQuery<'query, Conn, U> + 'query,
Source§fn get_result<'query, 'conn, U>(
self,
conn: &'conn mut Conn,
) -> AndThen<Self::LoadFuture<'conn>, Map<StreamFuture<Pin<Box<Self::Stream<'conn>>>>, fn(_: (Option<Result<U, Error>>, Pin<Box<Self::Stream<'conn>>>)) -> Result<U, Error>>, fn(_: Self::Stream<'conn>) -> Map<StreamFuture<Pin<Box<Self::Stream<'conn>>>>, fn(_: (Option<Result<U, Error>>, Pin<Box<Self::Stream<'conn>>>)) -> Result<U, Error>>>
fn get_result<'query, 'conn, U>( self, conn: &'conn mut Conn, ) -> AndThen<Self::LoadFuture<'conn>, Map<StreamFuture<Pin<Box<Self::Stream<'conn>>>>, fn(_: (Option<Result<U, Error>>, Pin<Box<Self::Stream<'conn>>>)) -> Result<U, Error>>, fn(_: Self::Stream<'conn>) -> Map<StreamFuture<Pin<Box<Self::Stream<'conn>>>>, fn(_: (Option<Result<U, Error>>, Pin<Box<Self::Stream<'conn>>>)) -> Result<U, Error>>>
Source§fn get_results<'query, 'conn, U>(
self,
conn: &'conn mut Conn,
) -> AndThen<Self::LoadFuture<'conn>, TryCollect<Self::Stream<'conn>, Vec<U>>, fn(_: Self::Stream<'conn>) -> TryCollect<Self::Stream<'conn>, Vec<U>>>
fn get_results<'query, 'conn, U>( self, conn: &'conn mut Conn, ) -> AndThen<Self::LoadFuture<'conn>, TryCollect<Self::Stream<'conn>, Vec<U>>, fn(_: Self::Stream<'conn>) -> TryCollect<Self::Stream<'conn>, Vec<U>>>
Vec with the affected rows. Read more