Test 1
{
    "tablesModels": {
        "test_sync_main": {
            "autoincrementID": false,
            "primaryKey": "ID",
            "fields": {
                "sFieldA": {
                    "type": "string",
                    "access": {
                        "write": [
                            "user"
                        ],
                        "read": [
                            "user"
                        ]
                    }
                },
                "iFieldB": {
                    "type": "int",
                    "access": {
                        "write": [
                            "user"
                        ],
                        "read": [
                            "user"
                        ]
                    }
                },
                "secondID": {
                    "type": "string",
                    "access": {
                        "write": [
                            "user"
                        ],
                        "read": [
                            "user"
                        ]
                    }
                }
            },
            "joins": {
                "second": {
                    "srcField": "secondID",
                    "dstTable": "test_sync_second",
                    "dstField": "ID"
                },
                "third": {
                    "type": "LEFT",
                    "srcField": "ID",
                    "dstTable": "test_sync_third",
                    "dstField": "mainID"
                }
            }
        },
        "test_sync_second": {
            "autoincrementID": false,
            "primaryKey": "ID",
            "fields": {
                "sFieldA": {
                    "type": "string",
                    "access": {
                        "write": [
                            "user"
                        ],
                        "read": [
                            "user"
                        ]
                    }
                },
                "thirdID": {
                    "type": "string",
                    "access": {
                        "write": [
                            "user"
                        ],
                        "read": [
                            "user"
                        ]
                    }
                }
            },
            "joins": {
                "third": {
                    "srcField": "thirdID",
                    "dstTable": "test_sync_third",
                    "dstField": "ID"
                }
            }
        },
        "test_sync_third": {
            "autoincrementID": false,
            "fields": {
                "iFieldB": {
                    "type": "int",
                    "access": {
                        "write": [
                            "user"
                        ],
                        "read": [
                            "user"
                        ]
                    }
                },
                "mainID": {
                    "type": "string",
                    "access": {
                        "write": [
                            "user"
                        ],
                        "read": [
                            "user"
                        ]
                    }
                }
            },
            "joins": {
                "main": {
                    "srcField": "mainID",
                    "dstTable": "test_sync_main",
                    "dstField": "ID"
                }
            }
        }
    },
    "mainTable": "test_sync_main",
    "fields": {
        "fieldA": {
            "field": "sFieldA"
        },
        "fieldB": {
            "field": "iFieldB"
        },
        "secondID": {
            "field": "secondID"
        }
    },
    "conditions": []
}


Requete generee :
{
    "joins": [],
    "select": {
        "fieldA": "`test_sync_main`.`sFieldA`",
        "fieldB": "`test_sync_main`.`iFieldB`",
        "secondID": "`test_sync_main`.`secondID`"
    },
    "mainTable": "test_sync_main",
    "aliasMainTable": "test_sync_main",
    "primaryKey": "ID",
    "conditions": [],
    "orderBy": ""
}


Test 2
{
    "tablesModels": {
        "test_sync_main": {
            "autoincrementID": false,
            "primaryKey": "ID",
            "fields": {
                "sFieldA": {
                    "type": "string",
                    "access": {
                        "write": [
                            "user"
                        ],
                        "read": [
                            "user"
                        ]
                    }
                },
                "iFieldB": {
                    "type": "int",
                    "access": {
                        "write": [
                            "user"
                        ],
                        "read": [
                            "user"
                        ]
                    }
                },
                "secondID": {
                    "type": "string",
                    "access": {
                        "write": [
                            "user"
                        ],
                        "read": [
                            "user"
                        ]
                    }
                }
            },
            "joins": {
                "second": {
                    "srcField": "secondID",
                    "dstTable": "test_sync_second",
                    "dstField": "ID"
                },
                "third": {
                    "type": "LEFT",
                    "srcField": "ID",
                    "dstTable": "test_sync_third",
                    "dstField": "mainID"
                }
            }
        },
        "test_sync_second": {
            "autoincrementID": false,
            "primaryKey": "ID",
            "fields": {
                "sFieldA": {
                    "type": "string",
                    "access": {
                        "write": [
                            "user"
                        ],
                        "read": [
                            "user"
                        ]
                    }
                },
                "thirdID": {
                    "type": "string",
                    "access": {
                        "write": [
                            "user"
                        ],
                        "read": [
                            "user"
                        ]
                    }
                }
            },
            "joins": {
                "third": {
                    "srcField": "thirdID",
                    "dstTable": "test_sync_third",
                    "dstField": "ID"
                }
            }
        },
        "test_sync_third": {
            "autoincrementID": false,
            "fields": {
                "iFieldB": {
                    "type": "int",
                    "access": {
                        "write": [
                            "user"
                        ],
                        "read": [
                            "user"
                        ]
                    }
                },
                "mainID": {
                    "type": "string",
                    "access": {
                        "write": [
                            "user"
                        ],
                        "read": [
                            "user"
                        ]
                    }
                }
            },
            "joins": {
                "main": {
                    "srcField": "mainID",
                    "dstTable": "test_sync_main",
                    "dstField": "ID"
                }
            }
        }
    },
    "mainTable": "test_sync_main",
    "pathsToTablesAliases": {
        "mainAlias": [],
        "secondAlias": [
            "second"
        ]
    },
    "fields": {
        "mainFieldA": {
            "field": "sFieldA"
        },
        "mainFieldB": {
            "field": "iFieldB"
        },
        "secondID": {
            "field": "secondID"
        },
        "secondFieldA": {
            "tableAlias": "secondAlias",
            "field": "sFieldA"
        },
        "thirdID": {
            "tableAlias": "secondAlias",
            "field": "thirdID"
        }
    },
    "conditions": [
        {
            "tablesAliases": [
                "secondAlias"
            ],
            "sql": "`second`.`sFieldA` = :secondFieldA"
        }
    ]
}


Requete generee :
{
    "joins": {
        "secondAlias": {
            "dstTable": "test_sync_second",
            "aliasSrcTable": "mainAlias",
            "joinCondition": "`mainAlias`.`secondID` = `secondAlias`.`ID`"
        }
    },
    "select": {
        "mainFieldA": "`mainAlias`.`sFieldA`",
        "mainFieldB": "`mainAlias`.`iFieldB`",
        "secondID": "`mainAlias`.`secondID`",
        "secondFieldA": "`secondAlias`.`sFieldA`",
        "thirdID": "`secondAlias`.`thirdID`"
    },
    "mainTable": "test_sync_main",
    "aliasMainTable": "test_sync_main",
    "primaryKey": "ID",
    "conditions": [
        "`second`.`sFieldA` = :secondFieldA"
    ],
    "orderBy": ""
}