Skip to content

Repository files navigation

Sqlpp11gen

sqlpp11gen is a c++ table class generator for sqlpp11.

There are two ways to use this gem. One way is to install it as a gem which needs to run in command line, the other one is to use the sourcce code in your rails app directly, which allows you to navigate in a client-side web browser.

Installation

Install it (the gem way)

Include the following line in the Gemfile of your Rails app.

gem"sqlpp11gen"

You can put it under the :development group.

And then run "bundle install" to install it.

Manual install (use the source code directly)

(1) downlod the source code and copy app folder to the app folder of your Rails project. Make sure the following files exist in your project:

app/controllers/cxxes_controller.rbapp/helpers/cxxes_helper.rbapp/views/cxxes/index.h.erb

(2) add a route in config/routes.rb

# config/routes.rbresources:cxxes

(3) register a new MIME type in config/initializers/mime_types.rb

# config/initializers/mime_types.rbMime::Type.register"text/plain",:h

That's it! Now ignite your rails app!

Usage

create a table

Let's create a table named 'Product'. You can skip this step if there are some tables already available in your Rails project.

$ rails g scaffold Product name:string price:decimal
$ rake db:migrate

Start the server if you installed the source code of this gem.

$ rails s # optional, start the web server 

Generate code in command line

Make sure the current directory is in the home of your Rails app.

  1. Run without any parameters to show usage message.
$ rails g sqlpp11gen:tab
Usage:
rails generate sqlpp11gen:tab NAME [OUTPUT_PATH] [FILENAME_PREFIX] [FILENAME_EXT] [options]
  • The NAME is necessary, it's the table name you want to generate code from.
  • OUTPUT_PATH allows you to specify the output path for the generated code. The default path is 'app/cxxes'.
  • FILENAME_PREFIX allows you to append a filename prefix. The default one is 'tab_'.
  • FILENAME_EXT allows you to choose the filename ext. The default one is 'hpp'.
  1. Run with one parameter
$ rails g sqlpp11gen:tab product
created app/cxxes/tab_product.hpp
  1. Run with all parameters
$ rails g sqlpp11gen:tab product public/cxxes dom_ h
created public/cxxes/dom_product.h

Now, you can use the generated files.

Generate code in web browser

Assume that a 'users' table already exists, browse 'http://localhost:3000/cxxes.h'.

If not, browse 'http://localhost:3000/cxxes.h?model=YourModelName'.

e.g. for Product model, browse 'http://localhost:3000/cxxes.h?model=Product'.

The output will be:

// WARNING; don't change this file manually. This file is generated by sqlpp11gen!
#ifndef SQLPP_TAB_PRODUCT_H
#defineSQLPP_TAB_PRODUCT_H
#include<sqlpp11/table.h>
#include<sqlpp11/char_sequence.h>
#include<sqlpp11/column_types.h>//// table: Product// fields: 5// id integer false integer// name string true varchar// price decimal true decimal// created_at datetime false datetime// updated_at datetime false datetime//namespaceTabProduct_ {
structId {
struct_alias_t {
staticconstexprconstchar _literal[] = "id";
using_name_t = sqlpp::make_char_sequence<sizeof(_literal), _literal>;
template <typename T>
struct_member_t {
T id;
T& operator()() { return id; }
const T& operator()() const { return id; }
};
};
using _traits = sqlpp::make_traits<sqlpp::integer>;
};
structName {
struct_alias_t {
staticconstexprconstchar _literal[] = "name";
using_name_t = sqlpp::make_char_sequence<sizeof(_literal), _literal>;
template <typename T>
struct_member_t {
T name;
T& operator()() { return name; }
const T& operator()() const { return name; }
};
};
using _traits = sqlpp::make_traits<sqlpp::varchar, sqlpp::tag::can_be_null>;
};
structPrice {
struct_alias_t {
staticconstexprconstchar _literal[] = "price";
using_name_t = sqlpp::make_char_sequence<sizeof(_literal), _literal>;
template <typename T>
struct_member_t {
T price;
T& operator()() { return price; }
const T& operator()() const { return price; }
};
};
using _traits = sqlpp::make_traits<sqlpp::floating_point, sqlpp::tag::can_be_null>;
};
structCreatedAt {
struct_alias_t {
staticconstexprconstchar _literal[] = "created_at";
using_name_t = sqlpp::make_char_sequence<sizeof(_literal), _literal>;
template <typename T>
struct_member_t {
T created_at;
T& operator()() { return created_at; }
const T& operator()() const { return created_at; }
};
};
using _traits = sqlpp::make_traits<sqlpp::time_point>;
};
structUpdatedAt {
struct_alias_t {
staticconstexprconstchar _literal[] = "updated_at";
using_name_t = sqlpp::make_char_sequence<sizeof(_literal), _literal>;
template <typename T>
struct_member_t {
T updated_at;
T& operator()() { return updated_at; }
const T& operator()() const { return updated_at; }
};
};
using _traits = sqlpp::make_traits<sqlpp::time_point>;
};
} // namespace TabProduct_structTabProduct : sqlpp::table_t<TabProduct
, TabProduct_::Id , TabProduct_::Name , TabProduct_::Price , TabProduct_::CreatedAt , TabProduct_::UpdatedAt >
{
using _value_type = sqlpp::no_value_t;
struct_alias_t {
staticconstexprconstchar _literal[] = "products";
using_name_t = sqlpp::make_char_sequence<sizeof(_literal), _literal>;
template <typename T>
struct_member_t {
T tabProduct;
T& operator()() { return tabProduct; }
const T& operator()() const { return tabProduct; }
};
};
};
structProductData {
ProductData() : id(0), price(0.0f) {}
std::int64_t id ; // false integer
std::string name ; // true varchardouble price ; // true decimal
sqlpp::chrono::microsecond_point created_at ; // false datetime
sqlpp::chrono::microsecond_point updated_at ; // false datetime
};
#endif// SQLPP_TAB_PRODUCT_H

Now, copy and paste the code!

Development

After checking out the repo, run bin/setup to install dependencies. Then, run rake spec to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment.

To install this gem onto your local machine, run bundle exec rake install. To release a new version, update the version number in version.rb, and then run bundle exec rake release, which will create a git tag for the version, push git commits and tags, and push the .gem file to rubygems.org.

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/sqlpp11gen. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the Contributor Covenant code of conduct.

License

The gem is available as open source under the terms of the MIT License.

About

A c++ table class generator for sqlpp11.

Resources

Code of conduct

Stars

6 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages