Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

is not the same : cannot make storage with storage_t #689

Closed
spiritEcosse opened this issue Mar 26, 2021 · 6 comments
Closed

is not the same : cannot make storage with storage_t #689

spiritEcosse opened this issue Mar 26, 2021 · 6 comments
Labels

Comments

@spiritEcosse
Copy link

spiritEcosse commented Mar 26, 2021

good time of day, I would like to use this approach "Slow & size effective" to create a storage and I would like to take data exactly from the method (&GroupModules::getLanguageName, &GroupModules::setLanguageName)
i have this code

    inline auto userStorage(const std::string& name)
    {
        return make_storage(
                    name,
                    make_table(
                        "registries",
                        make_column("id", &Registry::m_id, primary_key()),
                        make_column("url", &Registry::m_url),
                        make_column("priority", &Registry::m_priority),
                        make_column("info_url", &Registry::m_infoUrl),
                        make_column("test", &Registry::m_test, default_value(false))
                        ),
                    make_table(
                        "group_modules",
                        make_column("id", &GroupModules::m_id, primary_key()),
                        make_column("language", &GroupModules::m_language),
                        make_column("name", &GroupModules::m_name),
                        make_column("region", &GroupModules::m_region),
                        make_column("language_name", &GroupModules::getLanguageName, &GroupModules::setLanguageName)
                        ),
                    make_table(
                        "modules",
                        make_column("id", &Module::m_id, primary_key()),
                        make_column("name", &Module::m_name),
                        make_column("description", &Module::m_description),
                        make_column("abbreviation", &Module::m_abbreviation),
                        make_column("update", &Module::m_update)
                        ));
    }

    template<class O, class T, class ...Op>
    using Column = internal::column_t<O, T, const T& (O::*)() const, void (O::*)(T), Op...>;

    using Storage = internal::storage_t<
    internal::table_t<Registry,
        Column<Registry, decltype(Registry::m_id), constraints::primary_key_t<>>,
        Column<Registry, decltype(Registry::m_url)>,
        Column<Registry, decltype(Registry::m_priority)>,
        Column<Registry, decltype(Registry::m_infoUrl)>,
        Column<Registry, decltype(Registry::m_test), constraints::default_t<bool>>
    >,
    internal::table_t<GroupModules,
        Column<GroupModules, decltype(GroupModules::m_id), constraints::primary_key_t<>>,
        Column<GroupModules, decltype(GroupModules::m_language)>,
        Column<GroupModules, decltype(GroupModules::m_name)>,
        Column<GroupModules, decltype(GroupModules::m_region)>,
        Column<GroupModules, decltype(&GroupModules::getLanguageName, &GroupModules::setLanguageName)>
    >,
    internal::table_t<Module,
        Column<Module, decltype(Module::m_id), constraints::primary_key_t<>>,
        Column<Module, decltype(Module::m_name)>,
        Column<Module, decltype(Module::m_description)>,
        Column<Module, decltype(Module::m_abbreviation)>,
        Column<Module, decltype(Module::m_update)>
    >>;

    static_assert(std::is_same<Storage, decltype(userStorage(""))>::value, "");

but I get an error on this line

static_assert(std::is_same<Storage, decltype(userStorage(""))>::value, "");

though I'm not sure if I was not mistaken

Column<GroupModules, decltype(&GroupModules::getLanguageName, &GroupModules::setLanguageName)>

help, please

@fnc12
Copy link
Owner

fnc12 commented Mar 27, 2021

column with setter and getter has a type like this:

internal::column_t<GroupModules, decltype(GroupModules::m_languageName), decltype(&GroupModules::m_languageName), decltype(&GroupModules::getLanguageName), decltype(&GroupModules::setLanguageName)>

try it. Also you can check equality line by line the same way you check storage equality.

@fnc12 fnc12 added the question label Mar 27, 2021
@spiritEcosse
Copy link
Author

spiritEcosse commented Mar 27, 2021

i replaced this line

Column<GroupModules, decltype(&GroupModules::getLanguageName, &GroupModules::setLanguageName)>

on this

Column<GroupModules, decltype(GroupModules::m_languageName), decltype(&GroupModules::m_languageName), decltype(&GroupModules::getLanguageName), decltype(&GroupModules::setLanguageName)>

but i got the same error, at this place

static_assert(std::is_same<Storage, decltype(userStorage(""))>::value, "");

probably swears at this line, can i replace it

make_column("language_name", &GroupModules::getLanguageName, &GroupModules::setLanguageName)

with

make_column("language_name", &GroupModules::m_languageName, &GroupModules::m_languageName, &GroupModules::getLanguageName, &GroupModules::setLanguageName)

?

@fnc12
Copy link
Owner

fnc12 commented Mar 30, 2021

can i replace it?

No.

Replace a column with setter and getter with this

internal::column_t<GroupModules, decltype(GroupModules::m_languageName), decltype(&GroupModules::m_languageName), decltype(&GroupModules::getLanguageName), decltype(&GroupModules::setLanguageName)>

@spiritEcosse
Copy link
Author

thanks for the help, something does not work, I will return to "Quick & binary fat" - this work very well

@fnc12
Copy link
Owner

fnc12 commented Mar 31, 2021

ok if you say so. Anyway there is another cute issue and I develop this feature but very slowly. Writing storage type explicitly is a very boring action and can be done automatically. So subscribe on this issue to received some news.

@fnc12 fnc12 closed this as completed Mar 31, 2021
@spiritEcosse
Copy link
Author

thanks a lot

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants