You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Stepan Pilschikov (JIRA)" <ji...@apache.org> on 2018/10/22 10:53:00 UTC
[jira] [Comment Edited] (IGNITE-9951) thin php: Date data type cut
nanos
[ https://issues.apache.org/jira/browse/IGNITE-9951?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16658874#comment-16658874 ]
Stepan Pilschikov edited comment on IGNITE-9951 at 10/22/18 10:52 AM:
----------------------------------------------------------------------
[~pavel.petroshenko] checked case with Date, now i'ts works
But with timestamp i still can't understand
PHP put
{code}
$cache = $client->getOrCreateCache("PH_TIMESTAMP")->setKeyType(ObjectType::TIMESTAMP)->setValueType(ObjectType::INTEGER);
$cache->put((new Timestamp((DateTime::createFromFormat('Y-m-d H:i:s.u', '2018-10-22 13:35:19.117530'))->getTimestamp() * 1000, 117530)),1);
{code}
JS get
{code}
cache = (await igniteClient.getOrCreateCache("PH_TIMESTAMP")).setKeyType(ObjectType.PRIMITIVE_TYPE.TIMESTAMP);
console.log(JSON.stringify(await cache.get(new Timestamp(new Date('2018-10-22T13:35:19.117530').getTime(), 117530))));
{code}
When using timestamp as key i can't get value stored with php client (same python). And in a different way, when i put key timestamp from js i can't get it from php
But when i put timestamp key from js i can get it with python
As you see i using custom Timestamp object and define time and nano seconds
What should i do to get same timestamp in JS or Python?
was (Author: spilschikov):
[~pavel.petroshenko] checked case with Date, now i'ts works
But with timestamp i still can't understand
PHP put
{code}
$cache = $client->getOrCreateCache("PH_TIMESTAMP")->setKeyType(ObjectType::TIMESTAMP)->setValueType(ObjectType::INTEGER);
$cache->put((new Timestamp((DateTime::createFromFormat('Y-m-d H:i:s.u', '2018-10-22 13:35:19.117530'))->getTimestamp() * 1000, 117530)),1);
{code}
JS get
{code}
cache = (await igniteClient.getOrCreateCache("PH_TIMESTAMP")).setKeyType(ObjectType.PRIMITIVE_TYPE.TIMESTAMP);
console.log(JSON.stringify(await cache.get(new Timestamp(new Date('2018-10-22T13:35:19.117530').getTime(), 117530))));
{code}
When using timestamp as key i can't get value stored with php client (same python). And in a different way, when i put key timestamp from js i can't get it from php
But when i put timestamp key from js i can get it with python
As you see i using custom Timestamp object and define time and nano seconds
What should i do to get same timestamp in JS or Python?
> thin php: Date data type cut nanos
> ----------------------------------
>
> Key: IGNITE-9951
> URL: https://issues.apache.org/jira/browse/IGNITE-9951
> Project: Ignite
> Issue Type: Bug
> Components: thin client
> Affects Versions: 2.7
> Environment: Ignite 2.7 latest sources
> default cache configuration
> Python 3.7
> nodejs 10+
> PHP 7.2+
> Ubuntu 17
> Reporter: Stepan Pilschikov
> Assignee: Pavel Petroshenko
> Priority: Major
> Fix For: 2.7
>
>
> When using PHP data types TIMESTAMP or DATE have problem with getting data with others clients, main reason that is nano seconds was cutted from php client side
> PHP code
> {code}
> <?php
> require_once '/vendor/autoload.php';
> use Apache\Ignite\Client;
> use Apache\Ignite\ClientConfiguration;
> use Apache\Ignite\Data\Date;
> use Apache\Ignite\Type\ObjectType;
>
> $client = new Client();
> $ENDPOINT = '127.0.0.1:10800';
> $client->connect(new ClientConfiguration($ENDPOINT));
> $cache = $client->getOrCreateCache("PH_DATE")
> ->setKeyType(ObjectType::INTEGER)
> ->setValueType(ObjectType::DATE);
> $cache->put(1,Date::fromDateTime(DateTime::createFromFormat('Y-m-d H:i:s.u', '2018-10-19 18:31:13.029726')));
> {code}
> JS output
> {code}
> "2018-10-19T15:31:13.000Z"
> {code}
> Py code
> {code}
> from pyignite import Client
> from pyignite.datatypes import *
> client = Client()
> client.connect('127.0.0.1', 10800)
> cache = client.get_or_create_cache("PH_DATE")
> print(str(cache.get(1, key_hint=IntObject)))
> {code}
> Py output
> {code}
> 2018-10-19 18:31:13
> {code}
> When im using JS or Python for put looks like
> Py
> {code}
> 2018-10-19 18:31:13.029000
> {code}
> JS
> {code}
> "2018-10-19T15:31:13.029Z"
> {code}
> Same story with Timestamp when
> PHP put
> {code}
> <?php
> require_once '/vendor/autoload.php';
> use Apache\Ignite\Client;
> use Apache\Ignite\ClientConfiguration;
> use Apache\Ignite\Data\Timestamp;
> use Apache\Ignite\Type\ObjectType;
>
> $client = new Client();
> $ENDPOINT = '127.0.0.1:10800';
> $client->connect(new ClientConfiguration($ENDPOINT));
> try {
> $cache = $client->getOrCreateCache("PH_TIMESTAMP")->setKeyType(ObjectType::INTEGER)->setValueType(ObjectType::TIMESTAMP);
> $cache->put(1,(new Timestamp((DateTime::createFromFormat('Y-m-d H:i:s.u', '2018-10-19 18:31:13.029734'))->getTimestamp() * 1000, 29734)));
> } finally {
> $client->disconnect();
> }
> {code}
> Py output
> {code}
> (datetime.datetime(2018, 10, 19, 18, 31, 13), 29734)
> {code}
> should look like
> {code}
> (datetime.datetime(2018, 10, 19, 18, 31, 13, 29000), 29734)
> {code}
> Or JS
> {code}
> "2018-10-19T15:31:13.000Z"
> {code}
> should look like
> {code}
> "2018-10-19T15:31:13.029Z"
> {code}
> Also wanna to admit that PHP Method Timestamp::fromDateTime(Data) didn't take nano seconds from date time (thats why in timestamp initialization i am doing what i do)
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)