Как должен выглядеть make-файл из коннектора XDEVAPI C ++ MySQL 8.0 на Ma c? - PullRequest
0 голосов
/ 30 апреля 2020

Это довольно долго, так как я чувствую, что проблема сложная.
Я следую инструкциям / учебным пособиям / что-у-тебя, которые я могу найти на mysql сайт, однако, я не могу заставить его работать. Я был в этом в течение нескольких дней. Сначала я столкнулся с проблемами пути, отсутствующими файлами и т. Д. c. Я думаю, что я исправил это, но я все еще не могу заставить это работать.

Я должен отметить, что я очень неопытен в работе с make-файлами и сложной компиляцией через терминал. Я знаю, как скомпилировать со знакомым g++ main.cpp -o main, а затем запустить программу с ./main, но это все. Затем я обнаружил, что у Ma c есть компиляторы clang ++.

Я работаю с этим примером кода:

    #include <iostream>
    #include <mysqlx/xdevapi.h>
    using ::std::cout;
    using ::std::endl;
    using namespace ::mysqlx;
    int main(int argc, const char* argv[])
    try {
      const char   *url = (argc > 1 ? argv[1] : "mysqlx://root@127.0.0.1");
      cout << "Creating session on " << url
           << " ..." << endl;
      Session sess(url);
      {
      /*
        TODO: Only working with server version 8
      */
        RowResult res = sess.sql("show variables like 'version'").execute();
        std::stringstream version;
        version << res.fetchOne().get(1).get<string>();
        int major_version;
        version >> major_version;
        if (major_version < 8)
        {
          cout <<"Done!" <<endl;
          return 0;
        }
      }
      cout <<"Session accepted, creating collection..." <<endl;
      Schema sch= sess.getSchema("test");
      Collection coll= sch.createCollection("c1", true);
      cout <<"Inserting documents..." <<endl;
      coll.remove("true").execute();
      {
        Result add;
        add= coll.add(R"({ "name": "foo", "age": 1 })").execute();
        std::vector<string> ids = add.getGeneratedIds();
        cout <<"- added doc with id: " << ids[0] <<endl;
        add= coll.add(R"({ "name": "bar", "age": 2, "toys": [ "car", "ball" ] })")
                 .execute();
        if (ids.size() != 0)
          cout <<"- added doc with id: " << ids[0] <<endl;
        else
          cout <<"- added doc" <<endl;
        add= coll.add(R"({
           "name": "baz",
            "age": 3,
           "date": { "day": 20, "month": "Apr" }
        })").execute();
        if (ids.size() != 0)
          cout <<"- added doc with id: " << ids[0] <<endl;
        else
          cout <<"- added doc" <<endl;
        add= coll.add(R"({ "_id": "myuuid-1", "name": "foo", "age": 7 })")
                 .execute();
        ids = add.getGeneratedIds();
        if (ids.size() != 0)
          cout <<"- added doc with id: " << ids[0] <<endl;
        else
          cout <<"- added doc" <<endl;
      }
      cout <<"Fetching documents..." <<endl;
      DocResult docs = coll.find("age > 1 and name like 'ba%'").execute();
      DbDoc doc = docs.fetchOne();
      for (int i = 0; doc; ++i, doc = docs.fetchOne())
      {
        cout <<"doc#" <<i <<": " <<doc <<endl;
        for (Field fld : doc)
        {
          cout << " field `" << fld << "`: " <<doc[fld] << endl;
        }
        string name = doc["name"];
        cout << " name: " << name << endl;
        if (doc.hasField("date") && Value::DOCUMENT == doc.fieldType("date"))
        {
          cout << "- date field" << endl;
          DbDoc date = doc["date"];
          for (Field fld : date)
          {
            cout << "  date `" << fld << "`: " << date[fld] << endl;
          }
          string month = doc["date"]["month"];
          int day = date["day"];
          cout << "  month: " << month << endl;
          cout << "  day: " << day << endl;
        }
        if (doc.hasField("toys") && Value::ARRAY == doc.fieldType("toys"))
        {
          cout << "- toys:" << endl;
          for (auto toy : doc["toys"])
          {
            cout << "  " << toy << endl;
          }
        }
        cout << endl;
      }
      cout <<"Done!" <<endl;
    }
    catch (const mysqlx::Error &err)
    {
      cout <<"ERROR: " <<err <<endl;
      return 1;
    }
    catch (std::exception &ex)
    {
      cout <<"STD EXCEPTION: " <<ex.what() <<endl;
      return 1;
    }
    catch (const char *ex)
    {
      cout <<"EXCEPTION: " <<ex <<endl;
      return 1;
    }

Вывод должен быть следующим:

    Creating session on localhost, port 13009 ...
    Session accepted, creating collection...
    Inserting documents...
    - added doc with id: AA71B4BF6B72E511BD76001E684A06F0
    - added doc with id: 2885B4BF6B72E511BD76001E684A06F0
    - added doc with id: 3492B4BF6B72E511BD76001E684A06F0
    - added doc with id: myuuid-1
    Fetching documents...
    doc#0: {"_id": "AEFD9C44EB77E5116134001E684A06F0", "age": 3, "date": {"day": 20, "month": "Apr"}, "name": "baz"}
     field `_id`: AEFD9C44EB77E5116134001E684A06F0
     field `age`: 3
     field `date`: <document>
     field `name`: baz
     name: baz
    - date field
      date `day`: 20
      date `month`: Apr
      month: Apr
      day: 20
    doc#1: {"_id": "A0ABC08DAABAD1110C120800273BD115", "age": 2, "name": "bar", "toys": ["car", "ball"]}
     field `_id`: A0ABC08DAABAD1110C120800273BD115
     field `age`: 2
     field `name`: bar
     field `toys`: <array with 2 element(s)>
     name: bar
    - toys:
      car
      ball
    Done!

Поскольку я не знаком с передачей аргументов командной строки через makefiles, я избавился от URL-указателя и откорректировал строку подключения, внеся изменения в других местах по мере необходимости.

Это мой make-файл:

MYSQL_CONCPP_DIR = /usr/local/mysql-connector-c++-8.0.20
CPPFLAGS = -I $(MYSQL_CONCPP_DIR)/include -L $(MYSQL_CONCPP_DIR)/lib64
LDLIBS = -lmysqlcppconn8
CXX = clang++ -stdlib=libc++
CXXFLAGS = -std=c++11
app : app.cc

Я запускаю make app, он работает без ошибок, но после этого ничего не отображается. Я дал ему go с обычным SQL, следуя другому учебнику на этом сайте здесь , но, опять же, ничего не отображается. Может ли кто-нибудь дать мне руководство? Я думаю, что проблема в make-файле, поэтому я хочу изменить его, но не знаю, что еще нужно изменить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...