
================== Informix installation ========================

- CentOS 7

- As root 

yum update

reboot

- As root 

- Install Informix with defaults http://smooth1.co.uk/installs/dbinstalls.html#4.4.2

- usermod -d /home/informix informix

- mkdir /home/informix

- chown informix:informix /home/informix

- cp /root/.bash_profile /home/informix

- chown informix:informix /home/informix/.bash_profile

- Add to /home/informix/.bash_profile

. /opt/IDS.12.10.FC8/ol_informix1210.ksh

export LD_LIBRARY_PATH=$INFORMIXDIR/lib:$INFORMIXDIR/lib/esql:/usr/lib 

================== MONGODB ========================

cd /home/informix/tools/WIRE

cat $INFORMIXDIR/etc/jsonListener.properties
listener.port=29000
#url=jdbc:informix-sqli://localhost:16278/sysmaster:INFORMIXSERVER=lo_informix1210;USER=ifxjson;PASSWORD=iO^RE7A#v)T
url=jdbc:informix-sqli://localhost:16278/sysmaster:INFORMIXSERVER=lo_informix1210;USER=informix;PASSWORD=Derff1234

cat ./json_listener_start.sh
#!/bin/sh

${INFORMIXDIR}/extend/krakatoa/jre/bin/java \
      -jar ${INFORMIXDIR}/bin/jsonListener.jar \
      -config ${INFORMIXDIR}/etc/jsonListener.properties \
      -logfile ${INFORMIXDIR}/tmp/jsonListener.log \
      -start &

sleep 2

exit

cat json_listener_stop.sh
#!/bin/sh

java -jar ${INFORMIXDIR}/bin/jsonListener.jar \
 -config ${INFORMIXDIR}/etc/jsonListener.properties \
 -stop

exit

# Allows local connections
# For remote connections change hostname to * and add -hostname localhost to stop script

./json_listener_start.sh

mongodb-linux-x86_64-rhel70-3.4.4/bin/mongo -version

mongodb-linux-x86_64-rhel70-3.4.4/bin/mongo localhost:27017

show dbs 

# No NoSQL 'collections' just tables

use stores_demo

show collections

db.classes.find()

# JSON/BSON demo

document=({"catalog_num":10017,"rating_value":7}) 

db.rating.insert(document)

show collections

db.rating.find()

# Exclude first field (object id)
db.rating.find({},{_id:0})

db.rating.insert({"catalog_num": 10017, "rating_value": 8})
db.rating.insert({"catalog_num": 10018, "rating_value": 3})
db.rating.find({},{_id:0})

# Filter on catalog_num 
db.rating.find({catalog_num:10017},{_id:0})

# Filter on catalog_num and rating_value
db.rating.find({catalog_num:10017,rating_value:8},{_id:0})

# Sort on rating_value
# Asc
db.rating.find({},{_id:0}).sort({rating_value:1})
# Desc
db.rating.find({},{_id:0}).sort({rating_value:-1})

# Filter and sort desc
db.rating.find({catalog_num:10017},{_id:0}).sort({rating_value:-1})

# Count
db.rating.count({catalog_num:10017})
db.rating.distinct("catalog_num")

# Update
db.rating.update({catalog_num:10018},{$set:{rating_value:10}})

# Check for errors ok 1 err null

# Mongo db will only update the first matching document
# By default Informix will update all matching documents
# Editing wire listener properties set 
# update.one.enable=true
# Can still force to update all matching documents with
# db.rating.update({rating_value:10},{$set:{rating_value:8}},{multi:true})

# delete - always all matching
db.rating.find({},{_id:0})
db.rating.remove({catalog_num:10017})

db.rating.remove() # Need query
db.rating.remove({catalog_num:10018})
db.rating.drop()

db.rating.insert({"catalog_num": 10017, "rating_value": 7})
db.rating.find()

db.rating.insert({"catalog_num": 10019, "rating_value": 9,"comment": "A very simple to use product."})
db.rating.find({},{_id:0})

db.rating.insert({"catalog_num": 10017, "rating_value": 6})
db.rating.find({},{_id:0})

db.rating.distinct("catalog_num")
db.rating.distinct("rating_value",{"rating_value":{"$gt":7}})

db.rating.insert({"catalog_num": 10017, "rating_value": 2})
db.rating.insert({"catalog_num": 10017, "rating_value": 3})
db.rating.find({catalog_num:10017},{_id:0})
db.rating.find({catalog_num:10017},{_id:0}).limit(2).skip(1)

# SQL to query NoSQl
SELECT * FROM rating

SELECT data::JSON FROM rating

SELECT data.catalog_num::INT as catalog_num,
data.rating_value::INT as rating_value, 
data.comment::LVARCHAR as comment
FROM rating;

SELECT c.catalog_num AS catalog_number,
      s.description AS description,
      r.data.rating_value::INT AS rating
    FROM catalog c, stock s, rating r
    WHERE r.data.catalog_num::INT = c.catalog_num
      AND c.stock_num = s.stock_num
      AND c.manu_code = s.manu_code
    ORDER BY
      catalog_number,
      rating;

# NoSQl to query SQL

# No id column!
db.catalog.findOne()

db.catalog.find({catalog_num:10001})
db.catalog.count({catalog_num:10001})

CREATE view catalog_v(catalog_num AS 

CREATE VIEW rating_v (catalog_num) AS 
SELECT data.catalog_num::INT
FROM rating;

# No id column when query a view as well as a table
db.rating_v.find()

# Collection information
db.getCollection("catalog")

# Create index

db.rating.createIndex( { catalog_num: 1, rating: -1 } )

# Misc

db.runCommand({buildInfo:1})
db.runCommand({features:1})
db.runCommand({getCmdLineOpts:1})
db.runCommand({listCommands:1})
db.runCommand({listDatabases:1})
db.runCommand({hostInfo:1}) # Memory is JVM limits
db.runCommand({ping:1})
db.runCommand({serverStatus:1})
db.runCommand({whatsmyuri:1})

db.runCommand({exportCollection:"rating",file:"/tmp/rating.out",format:"json"})
db.runCommand({exportCollection:"rating",file:"/tmp/rating_filt.out",format:"json",query:{"rating_value":{"$gte":7}}})
db.runCommand({runProcedure:"spl_3"})

db.runCommand({transaction:"status"})
db.runCommand({transaction:"enable"})
db.runCommand({transaction:"commit"})
db.runCommand({transaction:"disable"})

# Joins

# Create a join document

joindoc={"$collections":
        {
             "customers":
                 {"$project":{customer_num:1,name:1,phone:1}},
             "orders": 
                 {"$project":{order_num:1,nitems:1,total:1,_id:0},
                  "$where":{total:{"$gt":100}}}
        },
  "$condition":
        {"customers.customer_num":"orders.customer_num"}
}

joindoc={"$collections":
        {
            "orders": 
                 {"$project":{order_num:1,nitems:1,total:1,_id:0},
                  "$where":{total:{$gt:1000}}},
            "shipments":
                 {"$project":{shipment_date:1,arrival_date:1,_id:0},
                  "$where":{address.zipcode:10112}},
            "customer":
                 {"$project":{customer_num:1,name:1,company:1,_id:0}}
       },
  "$condition":
       {
            "orders.order_num":"shipments.order_num",
         "orders.customer_num":"customer.customer_num",
       } 
}

joindoc={"$collections":
        {
            "orders": 
                 {"$project":{order_num:1,ship_date:1,ship_charge:1,_id:0},
                  "$where":{ship_charge:{$gt:10}}},
         "items":
                 {"$project":{manu_code:1,quantity:1,_id:0},
                  "$where":{quantity:1,manu_code:"SMT"}},
            "customer":
                 {"$project":{customer_num:1,fname:1,lname:1,company:1,_id:0}}
       },
  "$condition":
       {
            "orders.order_num":"items.order_num",
         "orders.customer_num":"customer.customer_num",
       } 
}

db.system.join.find(joindoc)

================== REST ========================

cd $INFORMIXDIR
unzip bin/nosql_sdk.zip
ln -s nosql-sdk-1.2.2 nosql_sdk

https://mvnrepository.com/artifact/org.apache.tomcat.embed/tomcat-embed-core/8.0.38

copy tomcat-embed-core-8.0.38.jar into $INFORMIXDIR/nosql_sdk/lib

cat rest_listener_start.sh
#!/bin/sh

 ${INFORMIXDIR}/extend/krakatoa/jre/bin/java \
 -cp ${INFORMIXDIR}/bin/jsonListener.jar:${INFORMIXDIR}/nosql_sdk/lib/tomcat-embed-core-8.0.38.jar:${INFORMIXDIR}/nosql_sdk/com.ibm.nosql.informix-1.2.2.jar \
  com.ibm.nosql.server.ListenerCLI \
 -config ${INFORMIXDIR}/etc/restListener.properties \
 -logfile /work/martinfu/731/restListener.log \
 -start &

exit

cat rest_listener_stop.sh
#!/bin/sh

${INFORMIXDIR}/extend/krakatoa/jre/bin/java \
 -cp ${INFORMIXDIR}/bin/jsonListener.jar:${INFORMIXDIR}/nosql_sdk/lib/tomcat-embed-core-8.0.38.jar:${INFORMIXDIR}/nosql_sdk/com.ibm.nosql.informix-1.2.2.jar \
  com.ibm.nosql.server.ListenerCLI \
 -config ${INFORMIXDIR}/etc/restListener.properties \
 -stop

exit

curl localhost:29001/

curl localhost:29001/stores_demo
curl -i localhost:29001/stores_demo
curl -v localh
ost:29001/stores_demo
# content type is json!


curl 'localhost:29001/stores_demo/rating' | python -m json.tool

curl 'localhost:29001/stores_demo/rating?sort=\{catalog_num:1,rating_value:1\}' | python -m json.tool

curl 'localhost:29001/stores_demo/rating?sort=\{catalog_num:1,rating_value:1\}&fields=\{_id:0,catalog_num:1,rating_value:1\}' | python -m json.tool

curl -v -X DELETE 'localhost:29001/stores_demo/rating?query=\{catalog_num:10019\}'

curl -v -H "Content-Type:application/json" -X POST 'localhost:29001/stores_demo/rating' -d '{catalog_num: 10018, rating_value: 3}'

curl 'localhost:29001/stores_demo/rating?query=\{catalog_num:10018\}' | python -m json.tool

curl -v -X PUT 'localhost:29001/stores_demo/rating?query=\{catalog_num:10018\}' -d '{"$set":{rating_value:20}}'

curl 'localhost:29001/stores_demo/rating?query=\{catalog_num:10018\}' | python -m json.tool

curl 'localhost:29001/stores_demo/$cmd?query=\{buildInfo:1\}' | python -m json.tool

curl 'localhost:29001/stores_demo/$cmd?query=\{features:1\}' | python -m json.tool

curl 'localhost:29001/stores_demo/$cmd?query=\{getCmdLineOpts:1\}' | python -m json.tool

curl 'localhost:29001/stores_demo/$cmd?query=\{listCommands:1\}' | python -m json.tool

curl 'localhost:29001/stores_demo/$cmd?query=\{listDatabases:1\}' | python -m json.tool

curl 'localhost:29001/stores_demo/$cmd?query=\{hostInfo:1\}' | python -m json.tool

curl 'localhost:29001/stores_demo/$cmd?query=\{ping:1\}' | python -m json.tool

curl 'localhost:29001/stores_demo/$cmd?query=\{serverStatus:1\}' | python -m json.tool

curl 'localhost:29001/stores_demo/$cmd?query=\{whatsmyuri:1\}' | python -m json.tool

curl 'localhost:29001/stores_demo/$cmd?query=\{exportCollection:"rating",file:"/tmp/rating.out",format:"json"\}' | python -m json.tool

curl 'localhost:29001/stores_demo/$cmd?query=\{exportCollection:"rating",file:"/tmp/rating_filt.out",format:"json",query:\{"rating_value":\{"$gte":7\}\}\}' | python -m json.tool

curl 'localhost:29001/justdave/$cmd?query=\{runProcedure:"spl_3"\}' | python -m json.tool


db.runCommand({exportCollection:"rating",file:"/tmp/rating.out",format:"json"})
db.runCommand({exportCollection:"rating",file:"/tmp/rating_filt.out",format:"json",query:{"rating_value":{"$gte":7}}})
db.runCommand({runProcedure:"spl_3"})

================== MQTT ========================

https://www.ibm.com/developerworks/community/blogs/smoe/entry/Working_with_the_new_12_10_xC7_MQTT_Listener?lang=en

http://www.eclipse.org/paho/downloads.php
->Maven Central -> jar

File org.eclipse.paho.client.mqttv3-1.1.1.jar




- Login as informix

- mkdir -p /home/informix/tools/WIRE

- cd /home/informix/tools/WIRE

- put into jar file into this folder


- su - informix
dbaccess stores_demo
create table sensor_tab

  (

    sensor_id integer,

    tstamp datetime year to fraction(5),

    value float

  );


- Download java jdk from http://www.oracle.com/technetwork/java/javase/downloads/index.html

- For linux x86_64

- Unpack into jdk1.8.0_131

- Edit ${INFORMIXDIR}/etc/MQTTListener.properties

- mkdir -p /home/informix/tools/WIRE

- cd /home/informix/tools/WIRE

- ./mqtt_listener_start.sh

- ./mqtt_compile.sh

- ./mqtt_run.sh

- ./mqtt_listener_stop.sh

